nodejs中this詳細解

2353 ワード

最近Nodejsを使ってAPP運営サービス管理システムの開発を行っていますが、nodejsの中のthisはよく変わります.資料を調べたら、thisは異なるコード位置で異なる意味を表しています.実際の運用過程でvar self=thisで関数外のthisを受け止めることができます.関数内でself.xxxを使って詳細は以下の通りです.
以下の内容はすべてnodejsの中のthisに関してjavascriptの中のthisではなくて、nodejsの中のthisとブラウザの中でjavascriptの中のthisは違います.
全体の中のthis
?
1
2
3
4console.log(this); {}this.num = 10;console.log(this.num); 10console.log(global.num); undefined全体のthisはデフォルトでは空のオブジェクトです.そしてグローバルの中でthisはglobalオブジェクトと何の関係もないですが、全体の中のthisは一体誰を指していますか?この章の後半部分について説明します.
関数の中のthis
?
1
2
3
4
5
6
7functionfn(){  this.num = 10;}fn();console.log(this); {}console.log(this.num); undefinedconsole.log(global.num); 10関数の中でthisが指すのはglobalオブジェクトで、全体の中のthisとは同一のオブジェクトではなく、簡単に言えば、関数の中でthisによって定義される変数はglobalに属性を追加するのと同じです.
信じないなら、下のコードを見て証明できます.
?
1
2
3
4
5
6
7
8
9
10functionfn(){  functionfn2(){    this.age = 18;  }  fn2();  console.log(this); global  console.log(this.age); 18  console.log(global.age); 18}fn();はい、関数の中でthisがglobalを指しています.
コンストラクタのthis
?
1
2
3
4
5
6functionFn(){  this.num = 998;}varfn = newFn();console.log(fn.num); 998console.log(global.num); undefined構造関数でthisが指し示すのは、globalではなくその例です.
私たちは今グローバルの中のthisについて話してもいいです.全体の中のthisといえば、Nodejsの中のスコープと関係があります.Nodejsの中のスコープに関する情報を知りたいなら、Nodejsの中のスコープ問題を検討してみてもいいです.この文章
本題に戻りますが、全体のthisはmodule.exportsを指しています.
?
1
2
3this.num = 10;console.log(module.exports); {num:10}console.log(module.exports.num);