感谢草莓和 yhc13 提供人肉翻译机支持
什么是反射
反射 (Reflection) 是指在程序在运行时 (run-time) 获取类信息的方式. 诸如实现动态创建类实例, 方法等. 在很语言中都有相关的的实现, 如 Java 和 c# 等
反射有什么用
在 as3 与 as2 不同, 类实例中任何元素, 如变量 (variable), 访问器 (accessor, 即 getter / setter), 方法 (method) 都是不可被 for..in 遍历的 (不是默认哦, 目前我还没找到办法可以让他被遍历),
并且不管你是否继承自 Object (默认继承就是 Object, 不写也一样), 是否把类声明为 dynamic.
或许有人会问自然是 Object 的子类, 不是可以用 setPropertyIsEnumerable 来设置是否隐藏变量么.
很遗憾的是经过的我的尝试, 在类里使用 setPropertyIsEnumerable("属性名") 编译器报告方法可能未定义.
随后尝试 super.setPropertyIsEnumerable("属性名"), 编译通过但抛运行时错误, 同样是方法未定义 -_-
而其他方法诸如 propertyIsEnumerable("属性名") 却可以正常使用
新建一个 ActionScript 项目, 分别创建下面 2 个类:
Dummy.as
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
ReflectionSample.as
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
最后测试 ReflectionSample, 记得用 debug 模式. 控制台中只会出现:
QUOTE:
------------------------------------------------------------
测试 for..in 循环, 遍历 Dummy 的实例
------------------------------------------------------------
显然 dummy 中的元素都没有被遍历出.
在 as1, 2 中很简单就可以实现的问题在 as3 得换个办法了, 谁让他们是传统的脚本语言呢.而在 as3 中, 就得通过反射来解决这个问题了. 方法会在文后介绍
URL:http://www.qqread.com/flash/2008/01/n392656.html进入讨论组讨论。相关专题
- Flash教程:简单光晕效果的制作 (133次浏览)
- 什么是AS2.0面向对象编程 (0次浏览)
- AS3学习笔记 (0次浏览)
- Flash交互式动画之星座查询器制作 (0次浏览)
- AS3.0的类及绑定 (0次浏览)
- AS3 中的反射 (0次浏览)
- AS3 技巧和提示 (0次浏览)
- 利用引导线制作动态爱心两例 (0次浏览)
- Flash教程:AS下雨动画效果的制作 (0次浏览)
- Flash AS代码常用调试语句trace()的使用 (0次浏览)



