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

时间:2015-08-20 05:25:23

标签: javascript arrays function class methods

所以,假设我有这两个功能:

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

var goo = function() {
    this.message = "gooBar";
    this.gooBar = 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();
}

然后是Goos:

for(var i = 0; i < Goos.length; i ++) {
    Goos[i].gooBar();
}

当我有很多功能(我为我的程序做的)时,这样做有点单调乏味。而且我的程序还为函数提供了多种方法。但有些功能只有一个。还有其他人有五个。所以,我想,为什么不使用Array对象,如下所示:

Array.prototype.apply = function() {
    for(var i = 0; i < this.length; i ++) {
        this[i].CALL_METHODS();
    }
};

然后我可以将所有数组存储在一个数组中,并在该数组中的每个元素上调用apply。但是,.CALL_METHODS()不是一种实际的方法(当然)。那么,有什么方法可以实现这一点,调用实例的所有方法,无论方法的数量还是名称?

提前致谢!

1 个答案:

答案 0 :(得分:1)

我确定在javascript中必须有实际的实际方法... 一个问题为什么你要调用javascript对象中声明的任何方法呢?必须有一些设计模式可用于你的问题,但需要搜索... 阅读刚刚开始输入一些代码:) 所以这里只是尝试以我能想到的任何可能的方式调用所有函数(可能非常糟糕):(

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 + '()');
        }
    }
}