Proxy类是AS3中的一个用来覆盖元运算符的类。Proxy类没有构造器,不能被实例化,只能通过继承来使用(类似于抽象类)。
Proxy类的基本用法如下:
[code language="as3"]package
{
import flash.utils.Proxy;
import flash.utils.flash_proxy;
dynamic public class Temp extends Proxy
{
override flash_proxy function XXXX(XXX):XXX
{
…
}
}
[/code]
1,写一个类继承Proxy;
2,记得要导入Proxy和flash_proxy,后者在Flex Builder的自动提示中没有找到;
3,使用override flash_proxy function来开始你的覆盖方法。
在上面的例子中,XXXX(XXX):XXX处可用的方法如下:(按帮助文档中的方法翻译)
[code language="as3"]
// 调用一个该类中不存在的方法的时候执行。
callProperty(name:*, ... rest):*
// 删除一个该类中不存在的对象的时候执行。
deleteProperty(name:*):Boolean
// 调用descendant accessor运算符的时候执行。descendant accessor运算符是两个连续的“.”号。
getDescendants(name:*):*
// 调用一个该类中不存在的变量的时候执行。
getProperty(name:*):*
// 执行类的hasOwnProperty方法时,如果查询的属性名称在类中未有定义,则调用此方法。hasOwnProperty是Object<对象的方法,所以所有的类都有此方法。
hasProperty(name:*):Boolean
// 未知。Checks whether a supplied QName is also marked as an attribute.
isAttribute(name:*):Boolean
// 以下三个基本上是一起用的,在for in和for each循环中获取下一个值。nextValue用于for each,nextName用于for in。在获取之前都会执行一次nextNameIndex。如果返回的int值是0,表示循环结束。否则,会根据nextNameIndex的返回int来获取name或者value。
nextName(index:int):String
nextNameIndex(index:int):int
nextValue(index:int):*
// 当给对象中一个未定义的属性赋值的时候,执行此方法。
setProperty(name:*, value:*):void
[/code]