声明: 本文章转自 Ticore's Blog
DisplayObject 四大變動屬性指的是 stage、parent、root、loaderInfo
這些物件本身的屬性會隨著相對物件變動而變
常常會令人難以捉摸~
依據這些屬性變動行為,DisplayObject 又可以分為三類:
- Stage
- Document Class
- Other DisplayObject
以下則是相關屬性與行為對照表:
| Stage | Document Class | Other DisplayObject Class | |
| stage | 總是得到 stage | 只要該物件有被加入 stage dom tree 之下, 便可經由 stage 屬性取得 Stage,否則為 null | 只要該物件有被加入 Stage dom tree 之下, 便可經由 stage 屬性取得 stage,否則為 null |
| parent | 總是得到 null | 只要該物件有被加入 DisplayObjectContainer 之下, 便可經由 prent 屬性取得 DisplayObjectContainer, 否則為 null | 只要該物件有被加入 DisplayObjectContainer 之下, 便可經由 prent 屬性取得 DisplayObjectContainer, 否則為 null |
| root | 總是得到 stage | 總是得到自己本身 | 會得到最接近 parent document class or stage,否則為 null |
| loaderInfo | 總是得到不完整功能的實體 | 可以得到實體,但是不會隨著相對物件變動 | 會得到最接近 parent document class or stage loaderInfo,否則為 null |
以上的特性可以很容易被驗證
由於相當繁瑣,僅對 Document Class 與非 Document Class 的 root 變動性作一個示範
main class:
package {
import flash.display.*;
import flash.net.*;
public class main extends MovieClip {
var modURL:String = "module.swf";
var ldr:Loader = new Loader();
var req:URLRequest = new URLRequest(modURL);
public function main():* {
ldr.load(req);
this.addChild(ldr);
}
}
}
module class:
package {
import flash.display.*;
import flash.events.*;
public class module extends MovieClip {
public function module():* {
this.addEventListener(Event.ADDED_TO_STAGE, onAddStage);
}
public function onAddStage(evtObj:Event):* {
this.removeEventListener(Event.ADDED_TO_STAGE, onAddStage);
var mc:MovieClip = new MovieClip();
mc.name = "mc";
trace(mc.root); // null
this.addChild(mc);
trace(mc.root); // [object module]
parent.parent.addChild(mc);
trace(mc.root); // [object main]
trace(this.root); // [object module]
parent.parent.addChild(this);
trace(this.root); // [object module]
}
}
}
本文详细解析了Flash AS3中DisplayObject的四大变动属性:stage、parent、root和loaderInfo,并通过实例演示了DocumentClass与其他显示对象在这些属性上的行为差异。
1683

被折叠的 条评论
为什么被折叠?



