※ 對於繫結方法,this 關鍵字會指向實作該方法的原始物件。 對於函數來說,this 則會在叫用該函數時指向關聯物件。
※ 此例,在top.aFunc 函數運算式內部trace(this)則this指向top的類別物件[object MovieClip] ; trace(this.name)則指向top的name屬性topMC ; 在top.aFunc 函數運算式外部trace(this)則指向[object MainTimeline]
※ 動態產生的函數可被delete刪除
在元件庫內,AAA是個圓形MovieClip,綁定AAA內建資源類別
1000715_function_test_1.swf
var top:MovieClip = addChild(new MovieClip()) as MovieClip; top.name = "topMC"; /*動態建立函式運算式*/ top.aFunc = function():DisplayObject{ trace("----------------------------------"); trace("@@@在top.aFunc()之內的trace"); /*以下這兩行雖然是trace(),但都會先new出AAA的實體,再trace出來*/ trace("@top.aFunc() / addChild(new AAA()) : " + addChild(new AAA())); //[object AAA] trace("@top.aFunc() / getQualifiedClassName(addChild(new AAA())) : " + getQualifiedClassName(addChild(new AAA()))); //AAA /*1118: 靜態類型 flash.display:DisplayObject 的值 以隱含方式強制轉型成可能不相關的類型 AAA。*/ /*var aaa:AAA = addChild(new AAA());*/ /*以下這行可以*/ /*var aaa:AAA = addChild(new AAA()) as AAA;*/ var aaa:AAA = this["addChild"](new AAA()); aaa.x=aaa.y=200; /*this 會在此函數(top.aFunc()函數) 被叫用時,指向關聯物件*/ /*top.aFunc()函數 - 動態建立給top實體的函數運算式*/ trace("@top.aFunc() / this : " + this); /*[object MovieClip]*/ trace("@top.aFunc() / this.name : " + this.name); //topMC trace("@top.aFunc() / getQualifiedClassName(this) : " + getQualifiedClassName(this)); //flash.display::MovieClip trace("@top.aFunc() / getQualifiedSuperclassName(this) : " + getQualifiedSuperclassName(this)); //flash.display::Sprite trace("----------------------------------"); return aaa; } trace("----------------------------------"); trace("@@@在top.aFunc()之外的trace"); trace("@this : " + this); //[object MainTimeline] trace("@this.name : " + this.name); //root1 trace("getQualifiedClassName(this) : " + getQualifiedClassName(this)); //_1000715_function_test_1_fla::MainTimeline trace("getQualifiedSuperclassName(this) : " + getQualifiedSuperclassName(this)); //flash.display::MovieClip trace("----------------------------------"); trace("top.aFunc : " + top.aFunc); //function Function() {} /*在以下這行會先調用了top.aFunc(),之後才trace出來*/ trace("※※※top.aFunc() : " + top.aFunc()); //[object AAA] /*top.aFunc();*/ trace("----------------------------------"); /*delete 動態產生的top.aFunc 函數運算式*/ delete top.aFunc; trace("@@@在delete top.aFunc之後的trace"); /*top.aFunc = null;*/ trace("top.aFunc : " + top.aFunc); //undefined /*底下這行會先調用top.aFunc(),之後再trace出來*/ trace("top.aFunc() : " + top.aFunc()); //TypeError: Error #1006: aFunc 不是函數。at _1000715_function_test_1_fla::MainTimeline/frame1() /*top.aFunc();*/
沒有留言:
張貼留言