我有以下简单的代码:
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方法,如果我删除此检查,函数可以正常工作。
任何人都可以澄清为什么我看到这样的行为?
答案 0 :(得分:0)
您依靠toString方法来检测实例的类型。即使在Java 7 vm和标准基础对象类的上下文中,这种方法也是不可靠的。返回值取决于虚拟机的供应商。
通常,除非您拥有并维护API,否则toString永远不可预测。不要解析它或将其与衍生逻辑进行比较。
...使用Modernizr检测浏览器