属性を使用するメソッドを持つオブジェクトがあります。属性を正しく使用していますか?
function TestObject(words) {
this.words = words;
function alertStuff() {
console.log(this.words);
}
}
doItPlease = new TestObject('say something!');
doItPlease.alertStuff();
属性を使用するメソッドを持つオブジェクトがあります。属性を正しく使用していますか?
function TestObject(words) {
this.words = words;
function alertStuff() {
console.log(this.words);
}
}
doItPlease = new TestObject('say something!');
doItPlease.alertStuff();
JavaScript では、プロパティと変数は区別されます。
this.alertStuff = function() {
console.log(this.words);
}
あなたのthis
例では、新しいオブジェクトへの参照を保持しています。コンストラクター関数のパラメーター/変数は、そのオブジェクトと直接関係がありません。
各インスタンスではなく、共通のプロトタイプ オブジェクトに関数を追加するのがより慣用的です。
TestObject.prototype.alertStuff = function() {
console.log(this.words);
}
これがどのように機能するかというと、 を実行すると、 indoItPlease.alertStuff()
の値が自動的にオブジェクトに設定されます。したがって、メソッドはそのオブジェクトとそのすべてのプロパティにアクセスできます。this
alertStuff
doItPlease
alertStuff()
コンストラクターから作成するすべてのインスタンスは、プロトタイプ チェーンにTestObject
同じTestObject.prototype
オブジェクトを持っているため、すべて同じ関数を共有するため、メモリ オーバーヘッドが少なくなります。