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

时间:2012-01-27 01:17:12

标签: flash actionscript-3 flex

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

function test():void {
 trace('function was called')
}

有什么区别?

3 个答案:

答案 0 :(得分:12)

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

请参阅Function.call文档。请注意有关函数与方法的注释 - 或"bound functions" - 以及示例。

即,给定:

function f ():* { return this; }
var x:Object = {f: f};

然后:

f.call(x)x.f()评估为xf()评价为Global,因为它具有不同的“this”(而评估为f.call())。

如果使用f()(没有参数),则“this”将为NaN,而Global如上所述,trace(this)为“this”。尝试在测试代码中使用{{1}},因为它会产生更多有用的上下文信息。

快乐的编码。

答案 1 :(得分:2)

另请注意,根据Jackson Dunstan的这项研究,.call()方法似乎慢了10倍。 http://jacksondunstan.com/articles/912

答案 2 :(得分:1)

当您传递函数并且想要动态使用它们时会产生实际差异,尽管apply()更常用于此,因为它允许您更动态地构造参数列表。

查看此文章,了解有关您可能希望使用这些方法的一些情况的更多信息http://www.developria.com/2010/12/functional-actionscript-part-1.html

相关问题