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