:如何在子窗口中调用父窗口中用prototype增加的方法?

时间:2022-05-20 19:42:24
如我在父窗中用prototype为Array添加了一个方法indexOf,
我如何以子窗口中调用呢?

===========Code如下:
父窗中的方法:
//功能:获得指定值的数组索引.
Array.prototype.indexOf = function(o){
    for(var i=0;i<this.length;i++)
        if(this[i]==o)return i;
    return-1;
};
---------------------------
子窗口(和父窗口是opener关系)中有一数组:
new aArr=['A','B','C'];
alert(aArr.opener.indexOf('B') ) //想在此调用indexOf得到返回值.(此句执行错误)
============Code End

可以解决吗?

5 个解决方案

#1


子窗口中,aArr和opener是同级的,所以不能像你那么用。
——另,因为你在父窗口中用了匿名函数,所以在子窗口中用opener.indexOf('B')也是错误的!

最常规的办法,修改子窗口代码为:
var aArr=['A','B','C'];
Array.prototype.indexOf=opener.Array.prototype.indexOf;
alert(aArr.indexOf("B"));

#2


try:
alert(opener.Array.prototype.indexOf.call(aArr, "B"));

#3


何必这样呢,用prototype为Array添加一个方法indexOf,但这个方法最好放在一个公共的global.js文件,然后所有网页都引用global.js文件

#4


个人觉得做成JS文件比较方便,不用绕弯路,更多的页面也可使用。

#5


fason用的call是正解。
以前没有用过call,汗如雨下……
学习!

#1


子窗口中,aArr和opener是同级的,所以不能像你那么用。
——另,因为你在父窗口中用了匿名函数,所以在子窗口中用opener.indexOf('B')也是错误的!

最常规的办法,修改子窗口代码为:
var aArr=['A','B','C'];
Array.prototype.indexOf=opener.Array.prototype.indexOf;
alert(aArr.indexOf("B"));

#2


try:
alert(opener.Array.prototype.indexOf.call(aArr, "B"));

#3


何必这样呢,用prototype为Array添加一个方法indexOf,但这个方法最好放在一个公共的global.js文件,然后所有网页都引用global.js文件

#4


个人觉得做成JS文件比较方便,不用绕弯路,更多的页面也可使用。

#5


fason用的call是正解。
以前没有用过call,汗如雨下……
学习!