克隆console.log函数

Ion*_*zău 2 javascript node.js

我想将console.log方法克隆到函数中.我们称之为log.

我试过了:

log = console.log;
log (1);
> TypeError: Illegal invocation
Run Code Online (Sandbox Code Playgroud)

这只发生在客户端.我在NodeJS控制台上工作正常:

$ node
> log = console.log
[Function]
> log ("Hello World!")
Hello World!
undefined
Run Code Online (Sandbox Code Playgroud)

第一个问题是:为什么它在服务器端工作正常但在客户端不工作?

我想覆盖该console.log方法,但在将其保存到另一个变量之后.

 oldLog = console.log;
 console.log = function () {
     /* do my stuff */
     oldLog.apply(this, arguments);
 }
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

SLa*_*aks 5

console.log要求this成为console对象.

如果你把它作为一个独立的功能,thiswindow,所以它不会起作用.

Node.js设置console.logconsole.log.bind(console),所以它始终有效.
(见来源)

如果你使用正确的this(使用bind()call()apply())调用它,它也可以在浏览器中使用.