Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数成为对象_Javascript - Fatal编程技术网

Javascript 函数成为对象

Javascript 函数成为对象,javascript,Javascript,我有以下简单的代码: someFields.forEach( function (itemId) {window.opener.Xrm.Page.getControl(itemId).setDisabled(true);}); forEach是按照(我们必须支持ie8+)实施的 这部分的问题在于: if ({}.toString.call(callback) !== "[object Function]") { throw new TypeError( ca

我有以下简单的代码:

   someFields.forEach(
       function (itemId) {window.opener.Xrm.Page.getControl(itemId).setDisabled(true);});
forEach是按照(我们必须支持ie8+)实施的

这部分的问题在于:

  if ({}.toString.call(callback) !== "[object Function]") {
      throw new TypeError( callback + " is not a function" );
    }
浏览器(IE7兼容模式下的IE9)将我的回调标识为[object object],而不是[object Function]。但是,该对象具有call方法,如果我删除该检查,该函数就可以正常工作。

有谁能澄清我为什么看到这种行为

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

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


…使用Modernizr检测浏览器

JOOI,为什么您只需要支持IE8+就可以在IE7兼容模式下运行?不会
.call(callback)
返回
callback
的返回值,而不是
callback
本身?你能提供一个我们可以使用的函数吗?@sp00m:不,它将返回调用
{}的返回值。toString
函数可能会影响此测试的原因是你正在运行compat模式。兼容性模式不是精确的表示形式。如果您想了解IE7的具体行为,您需要安装IE7。是否重现您的问题?IE7兼容模式下的IE10按预期打印
[目标函数]
。。。