以下の内容は、JavaScript のこれについてではなく、nodejs のこれに関するものであり、ブラウザの JavaScript のこれとは異なります。
グローバルのこれ
console.log(this); {} this.num = 10; console.log(this.num); 10 console.log(global.num); undefined
グローバル世界では、これはデフォルトで空のオブジェクトです。そして、グローバルでは、これはグローバル オブジェクトとは何の関係もありません。では、グローバルでは、これは正確に誰を指しているのでしょうか?これについては、この章の後半で説明します。
関数内のthis
function fn(){ this.num = 10; } fn(); console.log(this); {} console.log(this.num); undefined console.log(global.num); 10
関数の this はグローバル オブジェクトを指しますが、これはグローバルの this とは異なります。簡単に言えば、関数の this で定義した変数は、この時点でグローバルに属性を追加することと同じです。 「それとは関係ありません」の「これ」はグローバルと同じです。
信じられない場合は、以下のコードを見て証明してください。
function fn(){ function fn2(){ this.age = 18; } fn2(); console.log(this); global console.log(this.age); 18 console.log(global.age); 18 } fn();
そうです、関数内で this はグローバルを指しています。
コンストラクター内のthis
function Fn(){ this.num = 998; } var fn = new Fn(); console.log(fn.num); 998 console.log(global.num); undefined
コンストラクターでは、これはグローバルではなくインスタンスを指します。
これについてはグローバル コンテキストで説明します。グローバル コンテキストでこれについて言えば、実際には Nodejs のスコープと関係があります。Nodejs のスコープについて詳しく知りたい場合は、を参照してください。 Nodejs のスコープの問題に関するディスカッション。この記事。
トピックに戻りますが、グローバル コンテキストでは、これは module.exports を指します。
this.num = 10; console.log(module.exports); {num:10} console.log(module.exports.num);
これがグローバル ビューで module.exports を指すのはなぜですか? それでは、まず module.exports について詳しく知る必要があります。機会があればモジュールについて説明します。後で