【问题标题】:What is the difference between calling exampleFunction() and exampleFunction.call()?调用 exampleFunction() 和 exampleFunction.call() 有什么区别?
【发布时间】:2012-01-27 01:17:12
【问题描述】:

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

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

有什么区别?

【问题讨论】:

    标签: flash actionscript-3 apache-flex


    【解决方案1】:

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

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

    也就是说,给定:

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

    然后:

    f.call(x)x.f() 都计算为 x,而 f() 没有,因为它有一个不同的“this”(而是计算为 Global)。

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

    编码愉快。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 克里斯,您可能应该总结一下这篇文章,因为整个答案都在链接中的答案会被 StackOverflow 反对,可能会被删除。
      • 感谢您培训新手。此外,我的帖子旨在补充 pst 非常好的答案,但我不被允许评论他的答案。
      【解决方案3】:

      当您传递函数并希望动态使用它们时,实际的区别就出现了,尽管 apply() 更常用于此,因为它允许您更动态地构造参数列表。

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

      【讨论】:

        猜你喜欢
        • 2013-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 2011-02-22
        相关资源
        最近更新 更多