Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效

Javascript Pocket Reference, p. 121: How is this "monkey-patching" method supposed to work?

本文关键字:补丁 猴子 方法 有效 怎么回事 参考 121页 Javascript      更新时间:2023-09-26

作为apply()概念的说明,《Javascript袖珍参考》一书,O’Reilly,2012年第3版提供了以下代码示例:

// 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.
    o[m] = function() {
        // Now define the new method.
        console.log(new Date(), "Entering:", m); // Log
        // Invoke the original method
        var result = original.apply(this, arguments);
        console.log(new Date(), "Exiting:", m); // Log
        // Return the result of the original method
        return result;
    };
}

我理解这个trace方法应该做什么(取一个对象并包装该方法来记录执行时间的开始和结束。)

我只是不明白这怎么能做到。它不返回新的o[m]方法,也不调用它

如果我有

var obj = {
    double: function(num) {
        return 2 * num;
    }
}

如何调用trace查看日志?

它正在替换对象中名为m的方法。m实际上只是指向函数的对象哈希中的一个键,trace用另一个封装原始函数的函数来替换它。

在您的情况下,您会这样调用它:

trace(obj, 'double');

你可以这样称呼它:

obj.double(2);