功能成为对象

时间:2014-06-23 11:23:45

标签: javascript

我有以下简单的代码:

   someFields.forEach(
       function (itemId) {window.opener.Xrm.Page.getControl(itemId).setDisabled(true);});

forEach按照MDN实施(我们必须支持ie8 +)。

问题出在这一部分:

  if ({}.toString.call(callback) !== "[object Function]") {
      throw new TypeError( callback + " is not a function" );
    }

浏览器(IE7兼容模式下的IE9)将我的回调标识为[object Object]而不是[object Function]。但是该对象具有call方法,如果我删除此检查,函数可以正常工作。
任何人都可以澄清为什么我看到这样的行为?

1 个答案:

答案 0 :(得分:0)

您依靠toString方法来检测实例的类型。即使在Java 7 vm和标准基础对象类的上下文中,这种方法也是不可靠的。返回值取决于虚拟机的供应商。

通常,除非您拥有并维护API,否则toString永远不可预测。不要解析它或将其与衍生逻辑进行比较。

...使用Modernizr检测浏览器