Function.call(thisObject)无法在AS3上运行

时间:2014-02-28 20:35:52

标签: actionscript-3 function call this

我在这里有一个非常简单的代码,解释了在使用函数的调用方法时我在AS2和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()

由于

1 个答案:

答案 0 :(得分:2)

重要的是要认识到FunctionsMethods不同。 Methods绑定到它们所定义的对象,而Functions未绑定到任何对象。

当您在方法上使用apply甚至call时,您将从其实例中提取它,但它将始终绑定到该对象。

因此,在您的示例中,c()位于对象内部,这就是您没有看到thisObject更改的原因。

来自adobe on Methods:

  

方法是属于类定义的函数。曾经   创建类的实例,方法绑定到该实例。   与在类外声明的函数不同,不能使用方法   除了附加的实例

现在如果您希望能够更改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