当我在Chrome 18测试版中执行以下代码时出现错误:
console.log.apply(this, ['message']);
TypeError:非法调用。
在Firefox 10中,它按预期工作。
在IE9中,我收到错误:Object doesn't support property or method 'apply'
。
我猜这与浏览器的实现方式console.log
有关。
为什么它在Firefox中有效但在Chrome和IE中无效?我希望有人可以了解这个及其后果的原因。
这是JS Bin上的an executable sample。
答案 0 :(得分:104)
console
和log
是主机对象。它们的行为依赖于实现,并且在很大程度上不需要实现ECMAScript的语义。
FWIW,您的jsBin也会在Chrome中失败,除非您将其更改为...
console.log.apply(console, ['message']);
但似乎log
只是预测console
的调用上下文。
答案 1 :(得分:11)
这是另一种解决方案。我不确定没有args按预期工作的情况。
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')