当myarray在一个框架中时,为什么myarray instanceof Array和myarray.constructor === Array都为false?

时间:2011-06-24 20:13:09

标签: javascript

因此,以下代码警告错误两次:

window.onload = function(){
                    alert(window.myframe.myarray instanceof Array);
                    alert(window.myframe.myarray.constructor === Array);
                }

当名为“myframe”的页面中有一个iframe时,它包含一个名为“myarray”的数组。如果将数组移动到主页面(而不是iframe),则代码会按预期警告两次。有谁知道这是为什么?

2 个答案:

答案 0 :(得分:18)

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]';
}

详细说明here解释.constructor失败的原因。

  

在多帧DOM环境中编写脚本时会出现问题。简而言之,在一个iframe中创建的Array对象不与另一个iframe中创建的数组共享[[Prototype]]。它们的构造函数是不同的对象,因此instanceof和构造函数检查都失败了:

答案 1 :(得分:4)

这两个窗口分别创建了自己的全局脚本环境。

一个的Array构造函数与另一个的构造函数不同。

var win2=window.myframe;
alert(win2.myarray instanceof win2.Array); returns true