关于AS3中的dynamic 关键字

指定在运行时类的实例可以拥有添加的动态属性。如果使用某个类上的 dynamic 属性,您可以在运行时向该类的实例添加属性。未标记为 dynamic 的类被视为密封类,这意味着不能向该类的实例添加属性。
如果某个类是密封的(非动态),则尝试获得或设置该类实例中的属性就会导致错误。如果将编译器设置为严格模式并在创建实例时指定数据类型,则尝试向密封对象添加属性将生成编译器错误;否则发生运行时错误。
dynamic 属性不能被子类继承。如果扩展动态类,则只有声明子类具有 dynamic 属性时,子类才是动态的。
注意:仅支持在外部脚本文件中使用此关键字,而不支持在使用“Actions”面板编写的脚本中使用此关键字。
在这里我们要强调二点:
1.动态类随可以动态增加方法,但是动态增加的方法只能访问原类中的public访问权限,private权限是无法访问的。
2.动态的增加属性,还可以覆盖其原有的方法
dynamic class Person{  
 public var firstName:String = "Joe";  
  public var lastName:String = "Doe";  
}  
dynamic class Person{
  public var firstName:String = "Joe";
  public var lastName:String = "Doe";
} 

我们可以创建Person的实例,动态的增加属性,还可以覆盖其原有的方法,比如覆盖toString()方法:
var p:Person = new Person();
p.age = 25;//动态增加属性
p.toString = function():String{//覆盖原有方法
  return p.lastName + "," + p.firstName + "-" + age;
}

trace(p);//输出结果:Doe,Joe-25
应该注意动态的增加属性或覆盖原有方法时,该dynamic类的属性是private的,我们便不能访问到该属性。例如:
假设我们使Person这个对象的lastName是private,而不是public,那么我们的输出结果就是:Undefined,Joe-25.
 

as3中有几个类是动态类来的
Error 
RegExp 
Date 
Function 
Class 
Array
MovieClip
这些都是动态类,可以动态添加属性,加是可以加了,但加也有一定规则,需要使用数组访问符来加 和 访问

数组访问符有两种作用
1. 动态设置属性
2. 动态获取属性(相对意义上的动态)
不能使用点语法 .    ,要使用数组访问符 ,但有一个例外,MovieClip是可以直接使用点语法来访问动态属性

数组访问符有两种作用
1. 动态设置属性
2. 动态获取属性(相对意义上的动态)
动态与静态是相对的概念,在计算机概念上,编译文件的时候(即按下ctrl+Enter时),编译器(你不懂的话,先可以理解成flash软件)会先对源代码中 声明的对象 属性 方法  以及场景中所有对象
(比如一个图片 它其实是一个bitmap对象   一个影片剪辑  它其实还是一个MovieClip对象 只不过存在于场景中 显示出来罢了 实际在文件内部它还是识别为一个对象)
编译器会对这些已经存在的对象作一次点名,并把它们记录在一个“列表”中(这个列表是 flashPlayer底层自动维护的 我们不用理)
因为这个表已经记录在案所有编译阶段已经声明的对象,程序使用它们的时候 ,就可以在这个列表中查找
说到这里 不得不说一下内存空间的事情了
因为不同的数据类型 它们在内存中都有一定的固定字节长度  编译阶段已经声明的对象 运行时内存空间就已经申请好了
不会频繁向系统申请内存了 (系统的内存不是你想要就要 它像一个停车场 需要调度才可以腾位置的 太多的空位间隔 就要把车移动腾在一起 以整理出大空地(内存))   这个腾空间的概念 差不多就是内存整理 ,需要浪费一定的系统资源的
所以说静态编译的对象 会相对省系统资源 ,这个也是as3.0中大部分类都默认为密封类(即不能随便添加动态属性)的原因了
上面这段是解释为什么不能用  .属性 来添加 动态属性 的原因,as3中大部分对象都是密封类,不能直接使用  .属性 来添加

参考:http://www.cnblogs.com/mengyusha/archive/2011/07/22/2113488.html

       http://www.xzfblog.com/archives/as3%E4%B8%ADroot-%E6%97%A0%E6%B3%95%E7%9B%B4%E6%8E%A5%E5%8A%A8%E6%80%81%E6%B7%BB%E5%8A%A0%E5%B1%9E%E6%80%A7.html

转载于:https://www.cnblogs.com/ForFreeDom/archive/2012/02/15/2352262.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值