Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 克隆控制台.log函数_Javascript_Node.js - Fatal编程技术网

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:因为它是显式绑定在那里的。顺便说一句,他也在客户端歌剧院工作。