我正在为console.log()包装一个包装,以便对其运行时间有一些控制。
当我使用吸气剂时,我可以使其正常工作,但是我想使用普通函数,以便可以传递一些参数。
我希望它的功能与使用吸气剂相同,因为它会在控制台中打印正确的类和行号。
当我使用吸气剂时,正确的消息以及类名和行号将输出到控制台:
get info() {
return console.info.bind(console);
}
呼叫者:
this.logger.info('this is a log');
控制台结果:
这是一条日志
当我使用函数时,什么都不会输出到控制台
public info() {
return console.info.bind(console);
}
呼叫者:
this.logger.info('this is a log');
空白控制台中的结果:
答案 0 :(得分:1)
在使用函数时,它只是返回第一次调用时与传递的this
引用绑定的函数引用。
因此,您需要再次使用参数调用返回的函数对象。例如,我在下面的es6类中做了相同的事情:
class Test{
info() {
return console.info.bind(console);
}
}
let test = new Test();
test.info()("test");
如果这需要一步完成,我们可以使用call
或apply
代替绑定。与绑定不同,call
或apply
立即调用该函数,而bind只是绑定this
引用并返回绑定的函数。
使用call
:
info(){
return console.info.call(console, ...arguments);
}
和apply
:
info(){
return console.info.apply(console, arguments);
}
另一方面,当您使用 getter 时,访问info
之类的属性将导致调用getter并返回要立即调用的函数引用。
class Test{
get info() {
return console.info.bind(console);
}
}
let test = new Test();
test.info("test");
test.info -> returns the function reference
test.info("test") -> invokes the returned reference;
答案 1 :(得分:0)
public info() {
return console.info.apply(console, arguments)
}
可以。