Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中使用数组对象对数组内的实例调用任意方法_Javascript_Arrays_Function_Class_Methods - Fatal编程技术网

在JavaScript中使用数组对象对数组内的实例调用任意方法

在JavaScript中使用数组对象对数组内的实例调用任意方法,javascript,arrays,function,class,methods,Javascript,Arrays,Function,Class,Methods,假设我有两个函数: var foo = function() { this.message = "fooBar"; this.fooBar = function() { console.log(this.message); }; }; 及 然后,假设我有两个数组: var Foos = []; var Goos = []; 在程序的某个地方,我将相应函数的新实例推送到数组中(将新的foo放入Foos,将新的goo放入Goos)。现在,我想调用这些方法。

假设我有两个函数:

var foo = function() {
    this.message = "fooBar";
    this.fooBar = function() {
        console.log(this.message);
    };
};

然后,假设我有两个数组:

var Foos = [];
var Goos = [];
在程序的某个地方,我将相应函数的新实例推送到数组中(将新的foo放入Foos,将新的goo放入Goos)。现在,我想调用这些方法。所以,我可以为Foos做这件事:

for(var i = 0; i < Foos.length; i ++) {
    Foos[i].fooBar();
}
然后我可以将所有数组存储在一个数组中,并对该数组中的每个元素调用
apply
。但是,
.CALL_METHODS()
当然不是实际的方法。那么,有什么方法可以实现这一点,调用实例的所有方法,不管方法的数量或名称如何


提前谢谢

我确信在javascript中一定有真正的方法来实现这一点。。。 一个问题是,为什么要像这样调用javascript对象中声明的任何方法?必须有一些设计模式可用于您的问题,但需要搜索。。。 阅读时刚开始键入一些代码:) 因此,这里只是尝试以我能想到的任何可能的方式调用所有函数(可能是非常糟糕的方式):(

var foo=function(){
this.message=“fooBar”;
this.fooBar=函数(){
警报(“我来自foobar”);
};
this.fooBar1=函数(){
警报(“来自foobar 1的即时消息”);
};
};
var goo=函数(){
this.message=“gooBar”;
this.gooBar=函数(){
警报(此消息);
};
};
var f1=新的foo();
var f2=新的foo();
var g1=新的goo();
var Foos=[];
Foos[0]=f1;
Foos[1]=f2;
Foos[2]=g1;
对于(索引=0,len=Foos.length;索引
是的,没有成功。不过谢谢您的尝试!:)
for(var i = 0; i < Foos.length; i ++) {
    Foos[i].fooBar();
}
for(var i = 0; i < Goos.length; i ++) {
    Goos[i].gooBar();
}
Array.prototype.apply = function() {
    for(var i = 0; i < this.length; i ++) {
        this[i].CALL_METHODS();
    }
};
var foo = function() {
    this.message = "fooBar";
    this.fooBar = function() {
        alert('im from foobar');
    };
    this.fooBar1 = function() {
        alert('im from foobar 1');
    };
};
var goo = function() {
    this.message = "gooBar";
    this.gooBar = function() {
        alert(this.message);
    };
};
var f1=new foo();
var f2=new foo();
var g1=new goo();
var Foos=[];
Foos[0]=f1;
Foos[1]=f2;
Foos[2]=g1;
for (index = 0, len = Foos.length; index < len; ++index) {
    var dummy=Foos[index];
    console.log(dummy);
    for(c in dummy){
        var m='dummy.' + c.toString(); 
        if(eval(m+'.call')!=undefined){
            eval(m + '()');
        }
    }
}