2

属性を使用するメソッドを持つオブジェクトがあります。属性を正しく使用していますか?

function TestObject(words) {
  this.words = words;

  function alertStuff() {
    console.log(this.words);
  }
}

doItPlease = new TestObject('say something!');
doItPlease.alertStuff();
4

1 に答える 1

4

JavaScript では、プロパティと変数は区別されます。

this.alertStuff = function() {
    console.log(this.words);
}

あなたのthis例では、新しいオブジェクトへの参照を保持しています。コンストラクター関数のパラメーター/変数は、そのオブジェクトと直接関係がありません。


各インスタンスではなく、共通のプロトタイプ オブジェクトに関数を追加するのがより慣用的です。

TestObject.prototype.alertStuff = function() {
    console.log(this.words);
}

これがどのように機能するかというと、 を実行すると、 indoItPlease.alertStuff()の値が自動的にオブジェクトに設定されます。したがって、メソッドはそのオブジェクトとそのすべてのプロパティにアクセスできます。thisalertStuffdoItPleasealertStuff()

コンストラクターから作成するすべてのインスタンスは、プロトタイプ チェーンにTestObject同じTestObject.prototypeオブジェクトを持っているため、すべて同じ関数を共有するため、メモリ オーバーヘッドが少なくなります。

于 2013-06-28T18:45:27.877 に答える