【发布时间】:2015-03-18 19:25:53
【问题描述】:
我正在编写一个框架,它使用函数包装来创建调试工具。目前,我想在函数调用时报告和汇总信息。我正在使用以下代码:
function wrap(label, cb) {
return function () {
report(label);
cb.apply(this, arguments);
}
}
然后为了绑定调试操作我将使用:
function funcToWrap (){/* Some existing function*/}
funcToWrap = wrap("ContextLabel", funcToWrap);
现在,当funcToWrap 被调用时,它被连接到通过report() 方法。
我现在的要求是更改此语法,以便通过以下方式完成包装:
funcToWrap.wrap("ContextLabel");
理想情况下,这样的事情可以解决我的问题,但这当然是非法的:
Function.prototype.time = function(label){
var func = this;
// The actual difference:
this = function () { // ILLEGAL
report(label);
func.apply(this, arguments);
}
};
感谢您对此事的任何见解。
【问题讨论】:
-
请注意,您的包装函数在
cb.apply(…)之前缺少return。 -
@TravisJ:
arguments是一个内置功能:它是调用函数时提供的运行时参数的伪数组。因此,OP 的wrap正在返回一个函数,该函数正确地重用了调用它的this和调用它的参数。 (正如 Bergi 指出的那样,它缺少return。) -
@TravisJ:我第一次看到它时也犯了同样的错误。 :-)
标签: javascript node.js this wrapper