[轉]FLEX2/ACTIONSCRIPT3 的反射
在ActionScript 3中,你會發現在flash.utils包中有一系列函式提供了反射的功能。主要包含以下功能:
* 確定物件的類
* 獲取類的成員、方法、建構函式、父類的資訊
* 確定介面宣告的常數和方法
* 在執行時根據類名建立類的例項
* 在執行時根據成員名稱獲取或者設定物件成員的值
* 在執行時根據方法名稱,呼叫物件的方法
你可以使用類似於"describeType"之類的功能,它返回一個Xml物件。舉一個例子:
如果你想進一步,根據類名建立物件的例項,我們可以使用"getDefinitionByName()"
儘管這是一些非常方便的方法,但是在FlashPlayer中使用反射還是會有許多的限制,因為缺乏執行時的動態原始碼編譯。上面的功能對於那些在內建的類,比如:Sprite類來說無疑是有用的,但是對於自定義類來說,我們會遇到很多麻煩。比如:
儘管我們使用了import語句,但是"getDefinitionByName()"還是會失敗。原因上面已經說過了,在執行時編譯原始碼是不允許的。也許以後可以。在目前情況下,要實現上述功能,至少要在程式碼中初始化一個類的例項。也就是宣告一個類的例項:
* 確定物件的類
* 獲取類的成員、方法、建構函式、父類的資訊
* 確定介面宣告的常數和方法
* 在執行時根據類名建立類的例項
* 在執行時根據成員名稱獲取或者設定物件成員的值
* 在執行時根據方法名稱,呼叫物件的方法
你可以使用類似於"describeType"之類的功能,它返回一個Xml物件。舉一個例子:
package {
import flash.display.Sprite;
import flash.utils.describeType;
public class DescribeTypeExample extends Sprite {
public function DescribeTypeExample() {
var child:Sprite = new Sprite();
var description:XML = describeType(child);
trace(description..accessor.@name.toXMLString());
}
}
}
如果你想進一步,根據類名建立物件的例項,我們可以使用"getDefinitionByName()"
package {
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
public class GetDefinitionByNameExample extends Sprite {
private var bgColor:uint = 0xFFCC00;
private var size:uint = 80;
public function GetDefinitionByNameExample() {
var ClassReference:Class = getDefinitionByName(“flash.display.Sprite”) as Class;
var instance:Object = new ClassReference();
instance.graphics.beginFill(bgColor);
instance.graphics.drawRect(0, 0, size, size);
instance.graphics.endFill();
addChild(DisplayObject(instance));
}
}
}
儘管這是一些非常方便的方法,但是在FlashPlayer中使用反射還是會有許多的限制,因為缺乏執行時的動態原始碼編譯。上面的功能對於那些在內建的類,比如:Sprite類來說無疑是有用的,但是對於自定義類來說,我們會遇到很多麻煩。比如:
package {
import com.customtypes.string; // Custom String Implementation Class
import flash.utils.getDefinitionByName;
public class GetDefinitionByNameExample {
public function GetDefinitionByNameExample() {
var ClassReference:Class = getDefinitionByName(“com.customtypes.string”) as Class;
var instance:Object = new ClassReference();
instance.customParameter = “my parameter”;
}
}
}
儘管我們使用了import語句,但是"getDefinitionByName()"還是會失敗。原因上面已經說過了,在執行時編譯原始碼是不允許的。也許以後可以。在目前情況下,要實現上述功能,至少要在程式碼中初始化一個類的例項。也就是宣告一個類的例項:
var customType : com.customtypes.string;
相關文章
- struct轉map (反射)Struct反射
- 命令列模式下編譯ActionScript3命令列模式編譯
- ActionScript3檢測當前下載資源的速度
- java反射詳解(轉)Java反射
- Java反射機制(轉)Java反射
- Flex2 發現之旅:動態建立DataGrid列Flex
- JAVA反射通俗易懂轉Java反射
- 轉c#反射技術C#反射
- DataTable轉換list泛型集合(反射)泛型反射
- 深度剖析訊息反射機制 (轉)反射
- Java的反射Java反射
- .Net 中的反射(反射特性) - Part.3反射
- java反射——反射AnnotationJava反射
- 分析與理解訊息反射機制 (轉)反射
- java反射構建物件和方法的反射呼叫Java反射物件
- Java反射與hook混用反射某支付的方法Java反射Hook
- 反射+Class類方法_利用反射分析類的能力反射
- Java反射—方法的反射、深入瞭解泛型Java反射泛型
- C#中使用反射的使用實現和效能分析(轉)C#反射
- JAVA的反射機制==>用反射分析類的實現Java反射
- Python的反射Python反射
- Java 方法的反射Java反射
- Swift中的反射Swift反射
- 反射的應用反射
- 運用反射實現ejb動態委派 (轉)反射
- Java反射—初探反射基礎Java反射
- Java反射與反射優化Java反射優化
- 反射反射
- [轉載] python通過反射執行程式碼Python反射行程
- 【型別轉換】使用c#實現簡易的型別轉換(Emit,Expression,反射)型別C#MITExpress反射
- 反射的深入淺出反射
- Kotlin中的反射Kotlin反射
- 說說java的反射Java反射
- Java的反射機制Java反射
- 反射相關的API反射API
- Java反射的應用Java反射
- 00024.06 反射:反射的應用2:動態建立物件反射物件
- 【Java 反射學習】Java 反射基礎Java反射