所以,假设我有这两个功能:
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()
不是一种实际的方法(当然)。那么,有什么方法可以实现这一点,调用实例的所有方法,无论方法的数量还是名称?
提前致谢!
答案 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 + '()');
}
}
}