在Chrome中,以下代码会产生“非法调用”的错误:
为什么会出现这种情况,为什么我不能像处理普通对象那样处理
可能是重复问题:
如果JavaScript有头等函数,为什么这个不起作用?
g = console.log;
g(1);
为什么会出现这种情况,为什么我不能像处理普通对象那样处理
console.log
?可能是重复问题:
如果JavaScript有头等函数,为什么这个不起作用?
g = console.log;
g(1);
console.log
?这种情况发生是因为你已经丢失了对console
的引用。你直接调用log
函数,没有上下文。你可以在console
的上下文中调用该函数来使其工作:
g.call(console, 1);
或者,为了避免每次都这样做,您可以将函数绑定回console
对象:
var g = console.log.bind(console);
参考资料:
Function.prototype.call
Function.prototype.apply
(虽然本文没有使用,但仍然值得关注)Function.prototype.bind