为什么会失败:`function log(){console.log.apply(null,arguments);}`

时间:2014-12-30 06:50:13

标签: javascript

我试图包装console.log以缩短它:

function log(){console.log.apply(null,arguments);}

为什么这种用法会失败?

// this fails
var a=[1,2,3,4];
log(a);

错误:

  • Chrome:"非法调用"
  • IE:无声地失败
  • FF:TypeError:' log'调用了一个没有实现接口控制台的对象。"

2 个答案:

答案 0 :(得分:2)

我一直把它视为:

function log(){console.log.apply(console,arguments);}

答案 1 :(得分:-1)

@Ehtesh更正了您的语法,或者您可以使用这些方法,因为console.log.apply在旧版本的IE(console.log.apply not working in IE9)中不起作用。

方法一:

function log(p_sMessage) {
    if(!Debug) { return; }
    else { if(window.console) { console.log(p_sMessage); }}
}

方法2:

var log = Debug && window.console ? window.console.log.bind(window.console) : function() {};

var log = (Debug && Window.prototype.Console) ? Window.prototype.console.log.bind(Window.prototype.Console) : function () { };

(调试标志专门设置控制台消息的可见性)

N.B。: 方法1 适用于所有浏览器(不支持控制台的浏览器除外),但不显示调用它的行号。 方法2 显示行号但在旧IE中不起作用。