Javascript 当myarray位于帧中时,为什么myarray instanceof Array和myarray.constructor==Array都为false?

Javascript 当myarray位于帧中时,为什么myarray instanceof Array和myarray.constructor==Array都为false?,javascript,Javascript,因此,以下代码两次警告false: window.onload = function(){ alert(window.myframe.myarray instanceof Array); alert(window.myframe.myarray.constructor === Array); } 当页面中名为“myframe”的iframe包含名为“myarray”的数组时。如果将数

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

window.onload = function(){
                    alert(window.myframe.myarray instanceof Array);
                    alert(window.myframe.myarray.constructor === Array);
                }
当页面中名为“myframe”的iframe包含名为“myarray”的数组时。如果将数组移动到主页面(与iframe相反),则代码会按预期的两倍警告true。有人知道这是为什么吗

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]';
}
详细解释了
.constructor
在使用帧时失败的原因

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


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

其中一个的数组构造函数与另一个的数组构造函数不是同一个对象

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

window.myframe.myarray打印什么?我想你需要它是window.myframe.document.myarraywindow.myframename.myarray在Chrome和FF中运行良好。。。document.getElementById('myframeid')。contentWindow.myarray也可以工作。。。你的建议似乎不起作用……呃,我是说window.myframe.contentWindow.document.myarrayhmm也不起作用。。。我认为,如果您试图访问DOM节点而不是JavaScript变量/对象,您可以使用现有的功能。这正是问题所在。仍然有可能您不得不退回到duck类型,因为库可以轻松地重载toString(比如加载:
Object.prototype.toString.call([1,2,3])===“1,2,3”