Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   ASnative и прочие невидимки (http://www.flasher.ru/forum/showthread.php?t=114180)

chingachgoog 21.07.2008 14:22

ASnative и прочие невидимки
 
Навеяло соседней темой про AsBroadcaster.
AsBroadcaster и ASSetPropFlags хорошо известны и описаны. А вот до остального как-то не добрался еще, типа:
Код:

ASnative
ASSetNative
ASSetNativeAccessor

ASconstructor
ASSetupError...
// что-то еще?

Интересно, что и для чего?

crazyone 21.07.2008 15:08

Ничего не знаю про ASSetPropFlags
Что это?

etc 21.07.2008 15:37

http://google.com/search?q=asnative

iNils 21.07.2008 15:39

Вложений: 3
ASnative позволяет добраться до встроенных методов, через числовые индексы (список в аттаче). Удобен тем, что можно подменить какой нибудь метод на свой, а оригинальный метод вызвать через ASnative. Пример с setInterval

ASSetNative - ассоциирует строковое имя с числовым индексом метода. В примере заменяем создание нового клипа с createEmptyMovieClip на newClip. А чуть ниже далее вызваем его же через индексы. При этом, оригинальное название остается!
Код:

var o = MovieClip.prototype;
ASSetNative (o, 901, "6newClip,6beginFill,6beginGradientFill,6moveTo,6lineTo,6curveTo,6lineStyle,6endFill,6clear,8lineGradientStyle,8beginMeshFill,8beginBitmapFill");
trace (this.newClip ("mc", 0)); //_level0.mc
trace (ASnative (901, 0).apply (this, ["mc1", 1]));  //_level0.mc1
trace (this.createEmptyMovieClip ("mc2", 2)); //_level0.mc2

О цифрах перед названиями: по идеи, это номер версии с которой метод доступен. Например "7newClip", будет доступен из 7 и 8, но не из под 6-ки. Однако в CS3 9newClip не работает.

ASSetNativeAccessor - связывает индекс геттера с строкововым именем.
Код:

mc.blendMode = 3;
mc._lockroot = true;
trace (mc.blendMode); //multiply
trace (mc._lockroot); //true
////
var o = MovieClip.prototype;
ASSetNativeAccessor (o, 900, "_lockroot", 500);
ASSetNativeAccessor (o, 900, "8blendMode", 300);
////
trace (mc.blendMode); //true
trace (mc._lockroot); //multiply

Видно, как поменяли два геттера местами.

ASconstructor - аналог ASnative, только для конструктора. Например для Date
Код:

XYZ = ASconstructor (103, 256);
trace (ASconstructor (103, 256) ()); //Mon Jul 21 14:33:11 GMT+0400 2008
trace (XYZ ()); //Mon Jul 21 14:33:11 GMT+0400 2008

Заметь, new не нужен.

ASSetupError - ошибка :))
Код инициализации такой
Код:

function AsSetupError (s) {
        var _a = s.split (",");
        var _b = 0;
        while (_b < _a.length) {
                var _c = _a[_b];
                var _d = function (m) {
                        this.message = m;
                };
                var _e = new Error ();
                _d.prototype = _e;
                _e.name = _c;
                _e.message = _c;
                ++_b;
        }
}

ASSetPropFlags, ASSetNative и ASSetNativeAccessor в свою очередь тоже создаются через ASnative
Код:

ASSetPropFlags = ASnative(1, 0);
ASSetNative = ASnative(4, 0);
ASSetNativeAccessor = ASnative(4, 1);


chingachgoog 21.07.2008 16:35

iNils, моё уважение!
Буду мучить ASnative теперь :)

crazyone, ASSetPropFlags

Цитата:

Сообщение от Гурский
Функция ASSetPropFlags (obj, props, allowTrue, allowFalse) требует задания следующих параметров:
· obj. Объект, атрибуты свойств которого будут переопределяться;
· props. Список свойств, для которых необходимо установить атрибуты. Может быть или массивом, содержащим имена свойств в строковом представлении, или строкой, хранящей необходимые данные в виде последовательности иден тификаторов, разделенных запятыми:
Код:

["prop1", "prop2", "prop3"] // Список свойств в виде массива
"prop1, prop2, prop3" // Список свойств в строковом представлении

Если значением данного параметра является null, переопределение атрибутов проводится для всех свойств объекта;
· allowTrue. Число, хранящее три поразрядных флага для каждого из атрибутов.
Флаг первого разряда отвечает за атрибут DontEnum (скрытие от цикла for—in), второго—DontDelete (запрещение удаления), третьего—ReadOnly (защита от переопределения).

Варианты определения атрибутов свойства
Флаг / Величина allowTrue / Возможно ли переопределение / Возможно ли удаление / Возможно ли перечисление
000 0 Да Да Да
001 1 Да Да Нет
010 2 Да Нет Да
011 3 Да Нет Нет
100 4 Нет Да Да
101 5 Нет Да Нет
110 6 Нет Нет Да
111 7 Нет Нет Нет
· При помощи параметра allowTrue можно поднять флаги атрибутов, но не опустить их, т. е., если свойство защищено от удаления, то, введя в качестве n число 0, вы не сделаете его удаляемым. Чтобы установить для какого-то атрибута значение 0, нужно задействовать четвертый параметр рассматриваемой функции. По умолчанию практически для всех свойств и методов встроенных объектов ActionScript было использовано значение allowTrue, равное 7: их нельзя перечислять циклом for—in, удалять и переопределять (некоторые свойства можно задавать самостоятельно — им соответствует значение n=3);
· allowFalse. Параметр, полностью аналогичный n, но служащий не для поднятия, а для опускания флагов атрибутов. Чтобы снять с какого<то атрибута защиту, в заданном для данного параметра числе соответствующий флаг нужно установить как 1. Если создать для allowFalse таблицу, подобную приведенной выше для allowTrue, то элементы в ней будут прямо противоположными.

Код:

ASSetPropFlags(_global, null, null, 1);
for (var i in _global) {
trace(i);
}




Часовой пояс GMT +4, время: 22:23.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.