刚开始从书中学习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.
};
}
作者没有对该行发表评论,我对此代码有几个问题。
对这个特定代码中的闭包的解释也会受到欢迎! 谢谢
答案 0 :(得分:1)
apply
正在调用o[m]
引用的函数,使用this
作为“上下文”,并将传递给替换函数的arguments
转发到原始函数。< / p>
“上下文”指的是函数的“this”绑定。如果您要说var result = original.apply(null, arguments);
,则“上下文”将设置为null
,并且原始函数中对“this”的任何调用将(或多或少)替换为“null”。
在这种情况下,this
中对m
的调用可能会引用o
,因为它是包含对象。
答案 1 :(得分:0)