1

次のコードを見てください。

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

4 に答える 4

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の文字列パラメーターを反映するように更新されました)

于 2012-10-12T10:13:12.017 に答える
2

関数でオブジェクトを既に渡している場合は、そこにあるすべてのメソッドにアクセスできるため、次を使用します。

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

そして、この関数を次のように呼び出します。

executeSay( Main.person1 );
于 2012-10-12T10:00:05.577 に答える
0

これは機能していませんか?

executeSay = function(person){person.say()}
于 2012-10-12T10:04:43.263 に答える