ErikE 的第四个建议的一个稍微不同的版本,它做同样的工作,但我认为更简单的代码是
function Person() {
this.speech = null;
}
Person.prototype.tryToSpeak = function () {
this.speech = "hello";
var person = this;
window.setTimeout(function() {person.speak();}, 1000);
};
Person.prototype.speak = function () {
console.log(this.speech);
};
var person = new Person();
person.tryToSpeak();
正如 Erik 所说,您是否甚至需要多个Person
对象都不是很清楚,但如果您需要,这种技术可能是最简单的。
更新(基于 ErikE 的评论):这个版本为 , 添加了一个名称Person
,并将speech
in 作为参数传递,以明确谁在说什么。基本结构保持不变。
function Person(name) {
this.name = name;
}
Person.prototype.tryToSpeak = function (speech) {
var person = this;
window.setTimeout(function() {person.speak(speech);}, 1000);
};
Person.prototype.speak = function (speech) {
console.log(this.name + " says, '" + speech + "'.");
};
var lincoln = new Person("Abraham Lincoln");
var churchill = new Person("Winston Churchill");
lincoln.tryToSpeak("Four score and seven years ago...");
churchill.tryToSpeak("Never, never, never give up.");
要点是person
变量 intryToSpeak
是存储在闭包中的局部变量,而不是对某个单例的引用。