ErikE の 4 番目の提案の多少異なるバージョンは、ほぼ同じ仕事をしますが、より単純なコードだと思います。
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
れて、誰が何を言っているのかが明確になります。基本的な構造はそのままです。
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
はクロージャーに格納されたローカル変数であり、シングルトンへの参照ではないということです。