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

问题描述:

致电exampleFunction()exampleFunction.call()有什么区别? Actionscript上有一个功能,允许您通过“调用”方法使用函数。例如,使用 '测试' 功能下面,我可以写试验(+)test.call()调用exampleFunction()和exampleFunction.call()有什么区别?

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

的区别是什么?

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

查看Function.call文档。请注意有关功能与方法–或"bound functions" –的说明和示例。

也就是说,给出:

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

然后:

两个f.call(x)x.f()评估为xf()没有,因为它有一个不同的 “本”(它的计算结果,而不是Global)。

如果使用f.call()(无参数),则“this”将是NaN,而根据上面的f()Global设置为“this”。在测试代​​码中尝试使用trace(this),因为它会产生更有用的上下文信息。

快乐编码。

还要注意.CALL()方法似乎即将要慢10倍,根据这项研究由杰克逊邓斯坦: http://jacksondunstan.com/articles/912

+1

克里斯的更多信息,你应该总结的文章,作为答案,其中一个完整的答案是在链路通过*的皱起了眉头并可能被删除。 – 2012-01-27 13:31:26

+0

感谢您培训新手。此外,我的帖子是为了补充pst的非常好的答案,但我不能评论他的答案。 – Chris 2012-01-28 07:18:13

的实际差别来,当你身边路过功能和要动态地使用它们,尽管apply()更常用于此,因为它允许您更动态地构造参数列表。

退房此文出于某些情况下,你可能想要使用这些方法http://www.developria.com/2010/12/functional-actionscript-part-1.html