this
JavaScriptのオブジェクトについて少し混乱しています。
var contextTest = function() {
var x = 0;
}
var test = new contextTest;
console.log(test.x); // produces undefined
this.x = 0;
上記と関数内の違いは何ですか?
そのような変数を宣言すると、その変数がスコープにバインドされるといつも思っていました。
this
JavaScriptのオブジェクトについて少し混乱しています。
var contextTest = function() {
var x = 0;
}
var test = new contextTest;
console.log(test.x); // produces undefined
this.x = 0;
上記と関数内の違いは何ですか?
そのような変数を宣言すると、その変数がスコープにバインドされるといつも思っていました。
宣言:
var x = 0;
使用している関数スコープにローカル変数を作成するだけです。
その変数は、その関数または関数クロージャの存続期間中のみ存在します。このタイプの宣言は、この変数をプロパティとしてオブジェクトにバインドすることはありません。これを行うには、のようにオブジェクトのプロパティに値を明示的に割り当てる必要がありますthis.x = 0;
。
関数クロージャを永続化させる構造を使用する場合(コード内にあります)、ローカル変数の値は、その特定のコンテキスト内の特定の関数からのみアクセス可能な、プライベートにアクセス可能な変数として関数クロージャに存在します。オブジェクトのプライベートインスタンス変数のように動作します。this
ただし、これはオブジェクトのプロパティではなく、オブジェクトを介して、またはオブジェクトへの他の参照を介して参照することはできません。宣言されている関数からのみ参照できます。