javascript - 这行是什么意思:var result = original.apply(this,arguments)

时间:2015-04-13 23:11:07

标签: javascript

刚开始从书中学习javascript权威指南,有一行我无法弄清楚。这是完整的代码:

// Replace the method named m of the object o with a version that logs
// messages before and after invoking the original method.
function trace(o, m) {
    var original = o[m]; // Remember original method in the closure.
    o[m] = function() { // Now define the new method.
        console.log(new Date(), "Entering:", m); // Log message.
        var result = original.apply(this, arguments); // Invoke original.
        console.log(new Date(), "Exiting:", m); // Log message.
        return result; // Return result.
    };
}

作者没有对该行发表评论,我对此代码有几个问题。

  1. 参数分别是指什么?这个调用是如何工作的?
  2. 对这个特定代码中的闭包的解释也会受到欢迎! 谢谢

2 个答案:

答案 0 :(得分:1)

apply正在调用o[m]引用的函数,使用this作为“上下文”,并将传递给替换函数的arguments转发到原始函数。< / p>

“上下文”指的是函数的“this”绑定。如果您要说var result = original.apply(null, arguments);,则“上下文”将设置为null,并且原始函数中对“this”的任何调用将(或多或少)替换为“null”。

在这种情况下,this中对m的调用可能会引用o,因为它是包含对象。

答案 1 :(得分:0)

Javascript在调用函数时绑定特殊的thisarguments变量:this引用函数的调用者,arguments将所有传递的参数存储在数组中宾语。行original.apply(this, arguments)使用相同的original绑定和相同的参数调用函数this,其顺序与行发生的函数相同(此处存储的是匿名函数) o[m])。