ステートメント:
this.x = 100;
現在のスコープに変数を作成せず、参照するxオブジェクトにプロパティを設定しますthis。あなたの場合、thisによってインスタンス化されたばかりのオブジェクトでありnew f、 によって返されf、 に割り当てられるのと同じオブジェクトですa。
あなたが言う時:
x = 20;
JavaScript はx現在のスコープで を探しますが、見つからないため、グローバル スコープに到達するまで次のスコープを検索します。アクセス可能なスコープで見つからない場合はx、ご覧のように新しいグローバル変数を作成します。
ネストされた関数内からプロパティにアクセスするにxは、通常、参照をローカル変数に格納しthis、ネストされた関数がその変数を参照できるようにします。
var f = function() {
var self = this; // keep a reference to this
this.x = 100;
(
function() {
self.x = 20; // use the self reference from the containing scope
}
)();
};
var a = new f;
console.log(a.x); // will now be 20
それを行うもう 1 つの方法は、内部関数を参照することです。ただし、(外部)関数と同じになるように明示的に設定できるように、メソッドthis.xを介して内部関数を呼び出します。.call()thisf
var f = function() {
this.x = 100;
(
function() {
this.x = 20;
}
).call(this);
};
var a = new f;
console.log(a.x);
参考文献: