我对原型并不完全熟悉,我确信这是不正确的实现,但我已经把我想要实现的一个小例子放在一起。
我可以使原型成为文字对象而不是函数,但是我遇到的问题是我无法访问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();
如果你运行它,你将得到对象没有方法你好和再见。
答案 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); }
};
}