0

我对原型不太熟悉,我确信这是不正确的实现,但我已经整理了一个我想要实现的小例子。

我可以使原型成为文字对象而不是函数,但是遇到了无法访问我正在创建原型(在本例中为人)的对象中的变量/属性的问题。

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 has no method hello and goodbye。

4

1 回答 1

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 回答