为什么console.log.apply()会抛出非法调用错误?
当我在Chrome 18testing版中执行以下代码时,出现错误:
console.log.apply(this, ['message']);
TypeError:非法调用。
在Firefox 10中,它按预期工作。
在IE9中,我得到错误: Object doesn't support property or method 'apply'
。
我猜这与浏览器如何实现console.log
。
为什么它在Firefox中工作,而不是在Chrome和IE中? 我希望有人能够揭示这个及其后果的原因。
这里是一个 JS Bin 的可执行示例 。
console
和log
是主机对象。 他们的行为是依赖于实现的,在很大程度上不需要实现ECMAScript的语义。
FWIW,你的jsBin在Chrome中失败,除非你改变它…
console.log.apply(console, ['message']);
但是这似乎是log
只是预测console
的调用上下文。
这是另一种解决scheme。 我不确定没有参数的情况如预期的那样工作。
function logr(){ var i = -1, l = arguments.length, args = [], fn = 'console.log(args)'; while(++i<l){ args.push('args['+i+']'); }; fn = new Function('args',fn.replace(/args/,args.join(','))); fn(arguments); }; logr(1,2,3); logr(); logr({},this,'done')