调用exampleFunction()和exampleFunction.call()有什么区别?

Luc*_*cas 2 apache-flex flash actionscript-3

调用exampleFunction()exampleFunction.call()有什么区别?Actionscript上有一个功能,允许您通过'call'方法使用函数.例如,要使用下面的'test'函数,我可以编写test()test.call()

function test():void {
 trace('function was called')
}
Run Code Online (Sandbox Code Playgroud)

有什么不同?

小智 12

与ECMAScript(从中派生AS)一样,它允许通过第一个参数指定"this"上下文.

请参阅Function.call文档.请注意有关函数与方法(或"绑定函数")和示例的注释.

那是,给定:

function f ():* { return this; }
var x:Object = {f: f};
Run Code Online (Sandbox Code Playgroud)

然后:

两者f.call(x)并且x.f()评价为xwhile而f()不是因为它具有不同的"this"(它评估为Global相反).

如果f.call()(没有参数)使用那么"this"将是NaN,而f()如上所述,具有Global"this".尝试trace(this)在测试代​​码中使用,因为它将产生更多有用的上下文信息.

快乐的编码.