在ActionScript 3中可以拦截属性获取/设置吗?
在使用ActionScript 3开发时,我经常想找到一种方法,能够实现类似于Python中的__getattr__
和__setattr__
这两个神奇方法的功能,也就是可以在实例上拦截属性查找,并做一些自定义的操作。
在ActionScript 3中,有没有什么合适的方法可以做到这一点呢?在AS3中,普通(封闭的)类和动态类的属性查找行为有点不同——理想情况下,这两种情况应该能以相同的方式工作。在Python中,这对各种对象都能很好地工作(当然!)甚至对字典的子类也适用!
2 个回答
0
看看这个 flash.utils.Proxy
对象。
Proxy 类允许你改变 ActionScript 中一些默认的操作,比如获取和修改对象的属性。
0
在AS3中,你可以编写明确的变量访问器。
举个例子,假设有一个叫做 Class1
的类:
private var __myvar:String;
public function get myvar():String { return __myvar; }
public function set myvar(value:String):void { __myvar = value; }
现在,当你创建 Class1
的一个实例时,你可以通过访问器函数来访问 __myvar 这个变量。如果你想让这个变量可以绑定,你需要在它的一个访问器上加上 [Bindable] 这个关键词。
另外,你也可以只实现获取器(getter)或设置器(setter),这样你的变量就只能被读取或写入。
希望这些信息对你有帮助。