Показать сообщение отдельно
Старый 21.07.2008, 15:39
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 4  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
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);
Вложения
Тип файла: zip asnative.zip (3.8 Кб, 597 просмотров)
Тип файла: zip fmx8_setup.zip (8.1 Кб, 688 просмотров)
Тип файла: zip fmx8_setup2.zip (11.0 Кб, 739 просмотров)
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 04.06.2009 в 21:13.