2014-02-28 74 views
0

這裏有一個非常簡單的代碼,它解釋了在使用調用函數方法時,我在AS2和AS3之間發現的差異。Function.call(thisObject)不適用於AS3

var a = {name:"a"} 
var b = {name:"b"} 

function c() 
{ 
    trace(this.name) 
} 


c()   // AS2: undefined AS3: root1 
c.apply(a) // AS2: a   AS3: root1 
c.apply(b) // AS2: b   AS3: root1 

如何強制AS3尊重AS3中的thisObject參數?

這是Adobe文檔 「http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Function.html#apply()

感謝

+0

[這](HTTP://計算器。 com/questions/7238962/function-apply-not-using-thisarg-parameter/7260369#7260369)也可能有所幫助。 –

回答

2

認識到FunctionsMethods不同是很重要的。 Methods綁定到它們在其中定義的對象,而Functions未綁定到任何對象。

當您使用apply或甚至call您正在從其實例中提取它的方法,但它將始終綁定到該對象。

因此,在您的示例中,如果c()位於某個對象的內部,那就是爲什麼您沒有看到thisObject更改。

從Adobe的方法:

方法是是一類定義的一部分功能。一旦創建了該類的一個實例,就會將一個方法綁定到該實例。 不像一類外部聲明的功能,不能使用 的方法除了實例其附着

現在,如果你希望能夠改變thisObject您可以創建之外的功能該對象並通過新的thisObject參數。這裏的一個非常基本的例子:

class myClass { 
    public function myBoundFunction():void { 
     trace("Bound to: " + this); 
    } 
} 

//declared outside the class 
function unboundFunction():void { 
    trace("Unbound: " + this.name); 
} 

然後實例化和thisObject參數應用功能:

var c:myClass = new myClass(); 
//bound function call 
c.myBoundFunction.apply(this); 

//unbound call 
unboundFunction.apply(this); 

輸出:

Bound to: [object myClass] 
Unbound: root1 
相關問題