动态调用属性的方法

时间:2012-10-12 09:57:50

标签: javascript

好的,请看以下代码:

function person(name){
    this.name = name;
    this.say = function(){
        alert(this.name);
    }
};

Main = {};

Main.person1 =  new person("p1");

Main.person2 =  new person("p2");

Main.person3 =  new person("p3");

executeSay = function(argument1){
 //Implementation
}

executeSay应该做的是,调用给定参数的say方法,我不确定它是怎么回事但让我这样说executeSay("person1")应该执行Main.person1.say()等等。我认为我们可以通过call方法实现这一目标,但我不确定实现方法。

请不要建议采用以下方法

say = function(){
  alert(this.name);
}
say.call(Main.person1);

4 个答案:

答案 0 :(得分:2)

如果您已经在函数中传递了该对象,则可以访问其中的所有方法,因此请使用:

executeSay = function(person){
  person.say();
}

然后通过例如

调用此函数
executeSay( Main.person1 );

答案 1 :(得分:2)

我会这样做:

function Person(name){
  this.name = name
}

Person.prototype.say = function () {alert(this.name)}

var main = {
  person1: new Person('p1')
, person2: new Person('p2')
, person3: new Person('p3')
}

function executeSay(personStr) {main[personStr].say()}

(已更新以反映executeSay的字符串参数)

答案 2 :(得分:0)

executeSay在参数对象上调用say方法:

executeSay = function(person){
 person.say();
}

Demo

答案 3 :(得分:0)

这不起作用吗?

executeSay = function(person){person.say()}