首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >console.log.apply在IE9中不起作用

console.log.apply在IE9中不起作用
EN

Stack Overflow用户
提问于 2011-04-04 21:13:24
回答 7查看 20.8K关注 0票数 47

看起来我重新发明了轮子,但不知何故,这在Internet Explorer9中不起作用,但在IE6中起作用。

代码语言:javascript
复制
function debug()
  if(!window.console) { 
    window.console = { log: function() { /* do something */ } };
  }
  console.log.apply(console, arguments);
}

相关:Apply() question for javascript

F12调试器告诉我这个“对象”(console.log)不支持'apply‘方法。它甚至不能被识别为一个函数吗?还有其他的建议或想法吗?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 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方法

代码语言:javascript
复制
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.bindArray.prototype.forEach的兼容性实现,或者重写上面的代码片段以包含这些方法所使用的技术,从而使其在Internet Explorer8中工作。

另请参阅

票数 93
EN

Stack Overflow用户

发布于 2012-09-11 03:52:32

保罗·爱尔兰也有这样做的方式。它比上面的一些答案更简单,但使log总是输出一个数组(即使只传入了一个参数):

代码语言:javascript
复制
// 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) );
  }
};
票数 5
EN

Stack Overflow用户

发布于 2011-04-04 21:15:59

IE的一些宿主对象函数并不是真正的JavaScript函数,因此没有applycall。(例如,alert。)

所以你必须用一种很难的方式来做:

代码语言:javascript
复制
function debug()
  var index;

  if(!window.console) { 
    window.console = { log: function() { /* do something */ } };
  }
  for (index = 0; index < arguments.length; ++index) {
      console.log(arguments[index]);
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5538972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档