原型对象

时间:2012-07-01 00:45:15

标签: javascript prototype

我对原型并不完全熟悉,我确信这是不正确的实现,但我已经把我想要实现的一个小例子放在一起。

我可以使原型成为文字对象而不是函数,但是我遇到的问题是我无法访问Object中的变量/属性我正在创建一个原型(在本例中为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();

如果你运行它,你将得到对象没有方法你好和再见。

1 个答案:

答案 0 :(得分: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); }
    };
}

Here's a demo.