为什么当myarray位于帧中时,数组的myarray-instanceofArray和myarray.construc
Why are myarray instanceof Array and myarray.constructor === Array both false when myarray is in a frame?
因此以下代码两次警报为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
相关文章:
- 使用原型的自定义数组函数.新的 MyArray(1,2,3,4) 不工作
- 在JavaScript中,什么's myArray.length=0与myArray=new Array()之间
- Undefined不是对象(正在计算myArray.length)
- 当index=-1时,JS在请求myArray[index]时返回什么
- myArray.push([“dog”,3]);应该把狗和3推到最后,但没有,我在这里错过了什么
- myArray[项目].toUpperCase不是一个函数
- 为什么当myarray位于帧中时,数组的myarray-instanceofArray和myarray.construc
- var myArray =[], name;?
- 观察 MyArray().length 敲出