感謝草莓和 yhc13 提供人肉翻譯機(jī)支持
什么是反射 反射 (Reflection) 是指在程序在運(yùn)行時 (run-time) 獲取類信息的方式. 諸如實現(xiàn)動態(tài)創(chuàng)建類實例, 方法等. 在很語言中都有相關(guān)的的實現(xiàn), 如 Java 和 c# 等
反射有什么用 在 as3 與 as2 不同, 類實例中任何元素, 如變量 (variable), 訪問器 (accessor, 即 getter / setter), 方法 (method) 都是不可被 for..in 遍歷的 (不是默認(rèn)哦, 目前我還沒找到辦法可以讓他被遍歷), 并且不管你是否繼承自 Object (默認(rèn)繼承就是 Object, 不寫也一樣), 是否把類聲明為 dynamic. 或許有人會問自然是 Object 的子類, 不是可以用 setPropertyIsEnumerable 來設(shè)置是否隱藏變量么. 很遺憾的是經(jīng)過的我的嘗試, 在類里使用 setPropertyIsEnumerable("屬性名") 編譯器報告方法可能未定義. 隨后嘗試 super.setPropertyIsEnumerable("屬性名"), 編譯通過但拋運(yùn)行時錯誤, 同樣是方法未定義 -_- 而其他方法諸如 propertyIsEnumerable("屬性名") 卻可以正常使用
新建一個 ActionScript 項目, 分別創(chuàng)建下面 2 個類:
Dummy.as
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
ReflectionSample.as
代碼拷貝框
[Ctrl+A 全部選擇 然后拷貝]
最后測試 ReflectionSample, 記得用 debug 模式. 控制臺中只會出現(xiàn):
QUOTE: ------------------------------------------------------------ 測試 for..in 循環(huán), 遍歷 Dummy 的實例 ------------------------------------------------------------
顯然 dummy 中的元素都沒有被遍歷出.
在 as1, 2 中很簡單就可以實現(xiàn)的問題在 as3 得換個辦法了, 誰讓他們是傳統(tǒng)的腳本語言呢.而在 as3 中, 就得通過反射來解決這個問題了. 方法會在文后介紹
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁 下一頁 AS3 中的反射 [2]
◎進(jìn)入論壇Flash專欄版塊參加討論
|