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
4
関数の中のthis
?
1
2
3
4
5
6
7
信じないなら、下のコードを見て証明できます.
?
1
2
3
4
5
6
7
8
9
10
コンストラクタのthis
?
1
2
3
4
5
6
私たちは今グローバルの中のthisについて話してもいいです.全体の中のthisといえば、Nodejsの中のスコープと関係があります.Nodejsの中のスコープに関する情報を知りたいなら、Nodejsの中のスコープ問題を検討してみてもいいです.この文章
本題に戻りますが、全体のthisはmodule.exportsを指しています.
?
1
2
3
以下の内容はすべてnodejsの中のthisに関してjavascriptの中のthisではなくて、nodejsの中のthisとブラウザの中でjavascriptの中のthisは違います.
全体の中のthis
?
1
2
3
4
console.log(
this
); {}
this
.num = 10;
console.log(
this
.num); 10
console.log(global.num); undefined
全体のthisはデフォルトでは空のオブジェクトです.そしてグローバルの中でthisはglobalオブジェクトと何の関係もないですが、全体の中のthisは一体誰を指していますか?この章の後半部分について説明します.関数の中のthis
?
1
2
3
4
5
6
7
function
fn(){
this
.num = 10;
}
fn();
console.log(
this
); {}
console.log(
this
.num); undefined
console.log(global.num); 10
関数の中でthisが指すのはglobalオブジェクトで、全体の中のthisとは同一のオブジェクトではなく、簡単に言えば、関数の中でthisによって定義される変数はglobalに属性を追加するのと同じです.信じないなら、下のコードを見て証明できます.
?
1
2
3
4
5
6
7
8
9
10
function
fn(){
function
fn2(){
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
6
function
Fn(){
this
.num = 998;
}
var
fn =
new
Fn();
console.log(fn.num); 998
console.log(global.num); undefined
構造関数でthisが指し示すのは、globalではなくその例です.私たちは今グローバルの中のthisについて話してもいいです.全体の中のthisといえば、Nodejsの中のスコープと関係があります.Nodejsの中のスコープに関する情報を知りたいなら、Nodejsの中のスコープ問題を検討してみてもいいです.この文章
本題に戻りますが、全体のthisはmodule.exportsを指しています.
?
1
2
3
this
.num = 10;
console.log(module.exports); {num:10}
console.log(module.exports.num);