2016-04-16 79 views
1

我希望能够在给定列表中的所有对象上调用给定的方法名称。说我想要调用的方法是跳转,并且我有一个拥有不同跳转方法的人员列表。有些人以不同的角度跳,其他人跳得更高或更低等等。但是我想在我所有的篮球运动员名单上调用跳跃方法,以便看到谁会成为球队成员。如何使一个函数调用列表中每个对象的对象方法?

function doMethodToList(list, method){ 
    for(var i = 0; i< list.length; i++){ 
     list[i].method(); 
    } 
} 
var roster = [new Jack(), new Jill(), new Brody()]; 
doMethodToList(roster, "jump"); 

我在想像上面的代码应该工作。但是,当调用doMethodToList(roster, "jump")时会引发错误,因为我试图使用字符串作为方法。任何想法如何使这个功能的工作?也许我想这一切都是错误的?高度赞赏的答案。

回答

4

你可以简单地做你的循环如下:

if (list[i][method]) list[i][method](); 
+0

,“如果”是一个非常好的理念。这将使我无法运行包含具有特定方法类型的对象的列表列表。现在我只是遍历所有对象,看看他们是否有方法。如果是的话,它运行。如果不是,它不是一个错误。 –

+2

你也可以添加一个类型检查以确定它是一个函数:'if(list [i] [method] && typeof list [i] [method] ===“function”)list [i] [method]() ;'以防万一你的对象有属性不是方法,但具有相同的名称 –

4

要访问一个对象的属性与您使用字符串方括号

function doMethodToList(list, method){ 
    for(var i = 0; i< list.length; i++){ 
     list[i][method]();// <-- here 
    } 
} 
var roster = [new Jack(), new Jill(), new Brody()]; 
doMethodToList(roster, "jump"); 
相关问题