【问题标题】:Function.call( thisObject ) not working on AS3Function.call(thisObject) 在 AS3 上不起作用
【发布时间】:2014-02-28 20:35:52
【问题描述】:

我这里有一个非常简单的代码,它解释了我在使用函数的 call 方法时发现的 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 参数?

这里是 Adob​​e 文档 "http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Function.html#apply()"

谢谢

【问题讨论】:

  • This 也可能有帮助。

标签: actionscript-3 function call this


【解决方案1】:

重要的是要认识到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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2016-04-27
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    相关资源
    最近更新 更多