0

私はプロトタイプに完全に精通しているわけではなく、これは間違った実装であると確信していますが、私が達成しようとしていることの小さな例をまとめました。

プロトタイプを関数ではなくリテラルオブジェクトにすることはできましたが、プロトタイプを作成しているオブジェクト(この場合はPerson)内の変数/プロパティにアクセスできないという問題が発生しました。

Person = function() {
  this.name = 'mike';
  this.departureSaying = 'Adios amigo!';
}

Person.prototype.say = function() {
  var self = this;
  function hello() { alert('hello my name is ' + self.name); }
  function goodbye() { alert(self.departureSaying); }
}

var mike = new Person();
mike.say.hello();
mike.say.goodbye();

これを実行すると、Objectにはメソッドhelloとgoodbyeがありません。

4

1 に答える 1

2

2つの関数はメソッドに対してローカルです。あなたはそれらを返していません。

Person.prototype.say = function() {
    var self = this;

    return {
        hello: function() { alert('hello my name is ' + self.name); },
        goodbye: function() { alert(self.departureSaying); }
    };
};

そして、あなたは欲しいでしょう:

mike.say().hello();
mike.say().goodbye();

しかし、私はプロトタイプを使用することがこの状況に適しているとは思いません。代わりに、コンストラクターで割り当てます。

function Person() {
    var self = this;

    this.name = 'mike';
    this.departureSaying = 'Adios amigo!';

    this.say = {
        hello: function() { alert('hello my name is ' + self.name); },
        goodbye: function() { alert(self.departureSaying); }
    };
}

これがデモです。

于 2012-07-01T00:48:18.427 に答える