为什么当myarray位于帧中时,数组的myarray-instanceofArray和myarray.construc

Why are myarray instanceof Array and myarray.constructor === Array both false when myarray is in a frame?

本文关键字:myarray myarray-instanceofArray 数组 construc 于帧中 为什么      更新时间:2023-09-26

因此以下代码两次警报为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中创建的Array对象与在另一个ifame中创建的数组不共享[[Prototype]]。它们的构造函数是不同的对象,因此instanceof和构造函数检查都失败:

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

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

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