动态给剪辑对象增加属性

从库里动态加载元件的话,要先 new 一个元件实例,然后把它 addChild 到舞台显示容器中。
var temp = new myObject(); // myObject 为制作影片剪辑时候的链接属性
addChild(temp); //这样就添加了一个新的 myObject 对象的实例
很显然,如果是静态的直接从库里拖到舞台上,那么它肯定位于显示节点的底层。就是说,动态加载的元件实例要比舞台原有的元件实例,处于显示节点的上层,这很容易理解,一个是一开始就存在的,一个是 new 了以后加上去的。

加了 temp 之后可以给这个对象动态的增添属性,
比如: temp.createWay = "dynamic";
如果我们在 myObject 剪辑(实际上是一个可视化的类)中写脚本,如
trace(this.createWay );
那么,当temp被添加到显示列表时,flash会输出 "dynamic";

能够动态的增添属性带来诸多方便的同时,也有些令人困惑的地方

我测试的环境是一个嵌套的剪辑,相信大家都有过这样的做法

第一级的剪辑类名 Father;
第二级的剪辑类名 Son;

Father和Son里写入同样脚本:
trace(this.step)

制作Father的时候直接往里边拖一个Son实例,命名为 tson, 然后 tson.step = "son";
然后在舞台上拖一个建立好的Father实例,命名为 tfather, 然后 tfather.step = "father";
运行会有如下输出:
fasher
son

很正常的显示结果,下边我们做点改动。
不直接在舞台上添加Father实例,改用 new 的方法;
var tfather = new Father();
tfather.step = "father";
addChild(tfather);
运行输出如下:
undefined
father;
由此结果可以看出执行的顺序都变了,当都是静态的对象时,是一层一层的执行的,而改用 new 方法的时候,就不是一层一层的执行了,它是先运行 tson ,trace(this.step)的时候因为静态对象tson没有定义 this.step 所以undefined,然后到外层 trace(this.step),因为动态对象定义了临时属性 tfather.step, 所以输出father。

对于这种困惑的显示,我们再改动下。
在舞台中,添加
var tfather = new Father();
tfather.step = "father";
addChild(tfather);
不在Father剪辑中静态加入Son,也改用动态添加
var tson = new Son();
tson.step = "son";
addChild(tson);
运行会有如下输出:
fasher
son

于是我对 as3 中的 new 有点想法了。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值