2014-03-30 130 views
2

我想克隆console.log方法引入的功能。我们称之为log克隆的console.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); 
} 

我该如何解决?

+0

@cookiemonster相关。我问为什么在NodeJS上它工作正常。 –

+0

你在一个问两个不同的问题。这是你的其中一个问题的重复。至于它为什么在NodeJS中工作,为什么不呢?有ECMAScript中没有定义'console',所以其行为(或存在)完全实现有关。 –

+1

@IonicăBizău:因为它必然有明确的。顺便说一句,在Opera的客户端也是如此。 – Bergi

回答

5

console.log要求thisconsole的对象。

如果将其称为独立功能,this将为window,因此它不起作用。

Node.js的设置console.logconsole.log.bind(console),所以它总是工作。
(见source

如果你用正确的this(使用bind()call()apply())调用它,它会在浏览器中运行了。