调用 exampleFunction()和 exampleFunction.call()之间有什么区别? Actionscript上有一个功能,允许您通过'call'方法使用函数。例如,要使用下面的'test'函数,我可以写 test()和 test.call()
function test():void {
trace('function was called')
}
有什么区别?
答案 0 :(得分:12)
与ECMAScript(从中派生AS)一样,它允许通过第一个参数指定“this”上下文。
请参阅Function.call文档。请注意有关函数与方法的注释 - 或"bound functions" - 以及示例。
即,给定:
function f ():* { return this; }
var x:Object = {f: f};
然后:
f.call(x)
和x.f()
评估为x
而f()
评价为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