2014-03-30 91 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())調用它,它會在瀏覽器中運行了。