看起来我重新发明了轮子,但不知何故,这在Internet Explorer9中不起作用,但在IE6中起作用。
function debug()
if(!window.console) {
window.console = { log: function() { /* do something */ } };
}
console.log.apply(console, arguments);
}相关:Apply() question for javascript
F12调试器告诉我这个“对象”(console.log)不支持'apply‘方法。它甚至不能被识别为一个函数吗?还有其他的建议或想法吗?
发布于 2011-04-04 21:44:24
答案的第二部分I gave recently也回答了这个问题。我不认为这个是那个的副本,所以为了方便起见,我将它粘贴在这里:
console对象不是任何标准的一部分,它是文档对象模型的扩展。像其他DOM对象一样,它被认为是宿主对象,不需要像原生ECMAScript函数和对象那样从Object继承,也不需要从Function继承它的方法。这就是在这些方法上没有定义apply和call的原因。在IE9中,大多数DOM对象都经过了改进,可以继承原生ECMAScript类型。由于开发人员工具被认为是IE的扩展(尽管是内置扩展),它们显然没有得到与DOM其余部分相同的改进。
无论如何,您仍然可以通过一点Function.prototype ()魔术在控制台方法上使用一些绑定方法:
var log = Function.prototype.bind.call(console.log,console);log.apply(console,"this","is","a","test");//-> "thisisatest“
因此,您可以用相同的方式修复IE 9的所有console方法:
if (Function.prototype.bind && window.console && typeof console.log == "object"){
[
"log","info","warn","error","assert","dir","clear","profile","profileEnd"
].forEach(function (method) {
console[method] = this.bind(console[method], console);
}, Function.prototype.call);
}这将用调用"host“函数的本机函数替换"host”函数。您可以在代码中包含Function.prototype.bind和Array.prototype.forEach的兼容性实现,或者重写上面的代码片段以包含这些方法所使用的技术,从而使其在Internet Explorer8中工作。
另请参阅
console.log typeof is "object" instead of "function" -微软连接(需要实时帐户)发布于 2012-09-11 03:52:32
保罗·爱尔兰也有这样做的方式。它比上面的一些答案更简单,但使log总是输出一个数组(即使只传入了一个参数):
// usage: log('inside coolFunc',this,arguments);
// http://paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function(){
log.history = log.history || []; // store logs to an array for reference
log.history.push(arguments);
if(this.console){
console.log( Array.prototype.slice.call(arguments) );
}
};发布于 2011-04-04 21:15:59
IE的一些宿主对象函数并不是真正的JavaScript函数,因此没有apply或call。(例如,alert。)
所以你必须用一种很难的方式来做:
function debug()
var index;
if(!window.console) {
window.console = { log: function() { /* do something */ } };
}
for (index = 0; index < arguments.length; ++index) {
console.log(arguments[index]);
}
}https://stackoverflow.com/questions/5538972
复制相似问题