Javascript 克隆控制台.log函数
我想将Javascript 克隆控制台.log函数,javascript,node.js,Javascript,Node.js,我想将console.log方法克隆到函数中。让我们称之为log 我试过: log = console.log; log (1); > TypeError: Illegal invocation 这只发生在客户端。我可以在NodeJS控制台上正常工作: $ node > log = console.log [Function] > log ("Hello World!") Hello World! undefined 第一个问题是为什么:在服务器端,但在客户端,它是否工作正
console.log
方法克隆到函数中。让我们称之为log
我试过:
log = console.log;
log (1);
> TypeError: Illegal invocation
这只发生在客户端。我可以在NodeJS控制台上正常工作:
$ node
> log = console.log
[Function]
> log ("Hello World!")
Hello World!
undefined
第一个问题是为什么:在服务器端,但在客户端,它是否工作正常
我想重写console.log
方法,但在将其保存到另一个变量中之后
oldLog = console.log;
console.log = function () {
/* do my stuff */
oldLog.apply(this, arguments);
}
如何修复它?
console.log
要求this
是console
对象
如果将其作为独立函数调用,此
将是窗口
,因此它将无法工作
Node.js将console.log
设置为console.log.bind(console)
,因此它总是有效的。(见附件)
如果使用正确的
this
(使用bind()
或call()
或apply()
)调用它,它也会在浏览器中工作。@cookiemonster-Related。我在问为什么NodeJS很好用。你一次问了两个不同的问题。这是你一个问题的副本。至于它为什么在NodeJS中工作,为什么不呢?ECMAScript中没有定义控制台
,因此其行为(或存在)完全依赖于实现。@IonicăBizău:因为它是显式绑定在那里的。顺便说一句,他也在客户端歌剧院工作。