this
キーワードスコープグローバル/プライベートを理解するために以下の機能を試しました。'this'クロージャー機能内のJavaScriptの混乱
私はそれを97%理解しました。しかし、その中にプライベート関数ではなく、民間の値を返しますx.private_fa()
の出力上の混乱に捕まってしまいました。コードで
a = 1.1;
b = 2.1;
c = 3.1;
function fa() {
return "Global fa()";
}
function f() {
var a = 1;
this.b = 2;
function fa() {
return this.b; // or this.a not working..!
//return b // 2.2
//return a // 1
}
return {
private_a: a, // 1
global_a: window.a, // 1.1
private_b: this.b, // 2
global_b: b, // 2.1
private_fax: fa(), // 2.1
private_fa: fa, // function private fa()
global_fa: window.fa(), // Global fa()
global_c: c, // 3.1
private_c: this.c // 3
};
}
try {
f.prototype.c = 3;
var x = new f();
f.prototype.c = 4;
console.log("x:", x);
/*??? Please explain this.. ??? */
console.log("x.private_fa():", x.private_fa());
console.log(x.private_c);
var x1 = new f();
console.log(x1.private_c);
console.log(" - End - ");
} catch (e) {
console.error("Error: ", e.message);
}
は、 'VAR b_internal = this.b'のように、機能に入る前に別の変数に代入して、クロージャ内では'持っb_internal'を持っています正しい値。 –
さらに良いことに、あなたはすべてのメンバーにアクセスする(そしておそらくそれらを修正)する必要がある場合、 'VARトン= this'のように' this'と同じ操作を行い、その後、クロージャ内で 'TBを返す;' –
このされ、この 'ので、 'は、関数が定義されている場所ではなく、関数が呼び出されるコンテキストを参照し、' f'で返すオブジェクトに 'a'または' b'プロパティがないことに気づくことができます。と呼ばれる。 Federicoのように関数に値を格納する(closure)か、関数が定義されている場所に対応する "安定した" 'this 'を持つES6の矢印関数を使用する方法もあります – Kaddath