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

zjm*_*ler 7 javascript

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

window.onload = function(){
                    alert(window.myframe.myarray instanceof Array);
                    alert(window.myframe.myarray.constructor === Array);
                }
Run Code Online (Sandbox Code Playgroud)

名为"myframe"的页面中有一个iframe,其中包含一个名为"myarray"的数组.如果将数组移动到主页面(而不是iframe),则代码会按预期警告两次.有人知道为什么吗?

epa*_*llo 18

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

这里详细解释为什么.constructor失败的框架.

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


ken*_*bec 5

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

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

var win2=window.myframe;
alert(win2.myarray instanceof win2.Array); returns true
Run Code Online (Sandbox Code Playgroud)