Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Рефлекшн (http://www.flasher.ru/forum/showthread.php?t=51254)

vvsprog 10.11.2003 15:17

Рефлекшн
 
для тех кто не знает Reflection ето механизм выковыривания
информации о членах у обьекта в рунтайме

Иногда помогает при отладке или при обследовании
чужого кода
------Reflection.as---------
function PrintMembers(obj)
{
var info_array = GetTypeInfo(obj);
Trace("\nFunctions:")
for(var i=0;i<info_array.length;i++)
if(info_array[i].memberType=="function")
Trace("\tmemberName="+info_array[i].memberName+" , "+
"memberType="+info_array[i].memberType+" , "+
"memberValue="+info_array[i].memberValue
);
Trace("\nFields:")
for(var i=0;i<info_array.length;i++)
if(info_array[i].memberType!="function")
Trace("\tmemberName="+info_array[i].memberName+" , "+
"memberType="+info_array[i].memberType+" , "+
"memberValue="+info_array[i].memberValue
);

}
function SetParentClass(child,parent)
{
var exec="child";
while(eval(exec+".__proto__.__proto__"))
exec+=".__proto__";
(eval(exec)).__proto__=parent;
}
function TypeInfo(_memberName,_memberType,_memberValue)
{
this.memberName = _memberName;
this.memberType = _memberType;
this.memberValue = _memberValue;
}
function GetTypeInfo(type)
{
var dummy = new LoadVars();
SetParentClass(type,dummy);
var result_array=new Array();
var dummy_array = type.toString().split("&");
for(var i=0;i<dummy_array.length;i++)
{
var item_str = dummy_array[i];
var mName=unescape(item_str.substring(0,item_str.indexOf("=",2)));
result_array.push(new TypeInfo(mName,typeof(eval("type."+mName)),eval("type."+mName)));
}
return result_array;
}
----------------------------
пример использования
кидаем календарь на мувик даем иму имя например mcalendar
пишем
#include "Reflection.as"
PrintMembers(mcalendar);

если ктонить реализовывал рефлекшн по другому
(я иначе не смог) плиз пишите с удовольствием посмотрю

кстати некоторые функции используются у меня не только
для выковыривания членов обьектов
вот например функция
function SendReceive(_url_,callback,obj)
{
var _send = new LoadVars();
_send.OnLoad=callback;
SetParentClass(obj,_send);
obj.sendAndLoad(_url_, obj, "POST");
}
пример использования

SendReceive(_root._path,parseRes,{uid:_root.userID,
key:_root.guidKey,
opID:"receive"
});
я думаю смысл понятен(весь прикол в третьем параметре)


Всем счастливо.....


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

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