我试图通过尝试细分一些代码来学习一些高级的javascript。对于这个函数,我知道它在大多数情况下做了什么,它包含了具有日志记录功能的函数,因此在将来的函数调用中它将注销到控制台。我对underscore.js _.extend感到困惑 - 我知道它想要将属性从源复制到目标。但是我没看到原始函数和 obj [method] 之间有任何区别。我试图检查属性,但没有什么突出的?为什么我们还需要打电话呢?谢谢你的帮助!
function wrapWithLogger (msg, method, obj, color) {
obj = obj || window;
color = color || "blue";
var fn = obj[method];
obj[method] = function () {
//console.log('Args: ', arguments);
var strArgs = _.chain(arguments)
.toArray(arguments)
.map(function (arg) {
if (_.isFunction(arg)) {
var fnName = arg.name || "fn";
return fnName + "() {...}";
}
else if (_.isObject(arg))
return "{...}";
else
return JSON.stringify(arg);
})
.value()
.join(", ");
logWithColor(msg + "(" + strArgs + ")", color);
return fn && fn.apply(this, arguments);
};
**.extend(obj[method], fn);**
}