【转】AS3 使用dynamic属性来创建动态类

动态类
“动态”类定义在运行时可通过添加/ 更改属性和方法来改变的对象 非动态类(如 String类)是“密封”类。您不能在运行时向密封类中添加属性或方法。

在声明类时,可以通过使用 dynamic 属性来创建动态类 。例如,下面的代码创建一个名为
Protean 的动态类:
  1. dynamic class Protean
  2. {
  3. private var privateGreeting:String = "hi";
  4. public var publicGreeting:String = "hello";
  5. function Protean()
  6. {
  7. trace("Protean instance created");
  8. }
  9. }

如果要在以后实例化 Protean 类的实例,则可以在类定义的外部向该类中添加属性或方法
例如,下面的代码创建 Protean 类的一个实例,并向该实例中添加两个名称分别为 aString和 aNumber 的属性:

  
  1. var myProtean:Protean = new Protean();
  2. myProtean.aString = "testing";
  3. myProtean.aNumber = 3;
  4. trace(myProtean.aString, myProtean.aNumber); // 测试 3

添加到动态类实例中的属性是运行时实体,因此会在运行时完成所有类型检查。不能向以这种方式添加的属性中添加类型注释。

您还可以定义一个函数并将该函数附加到 myProtean 实例的某个属性,从而向 myProtean实例中添加方法。下面的代码将 trace 语句移到一个名为 traceProtean() 的方法中:

  1. var myProtean:Protean = new Protean();
  2. myProtean.aString = "testing";
  3. myProtean.aNumber = 3;
  4. myProtean.traceProtean = function ()
  5. {
  6. trace(this.aString, this.aNumber);
  7. };
  8. myProtean.traceProtean(); // 测试 3

但是,以这种方式创建的方法对于 Protean 类的任何私有属性或方法都不具有访问权限。而且,即使对 Protean 类的公共属性或方法的引用也必须用 this 关键字或类名进行限定。 下面的示例说明了 traceProtean() 方法,该方法尝试访问 Protean 类的私有变量和公共变量。

  1. myProtean.traceProtean = function ()
  2. {
  3. trace(myProtean.privateGreeting); // undefined
  4. trace(myProtean.publicGreeting); // hello
  5. };
  6. myProtean.traceProtean();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值