Nodejsの中のthis

2860 ワード

以下の内容はすべてnodejsの中のthisに関してjavascriptの中のthisではなくて、nodejsの中のthisとブラウザの中でjavascriptの中のthisは違います.
 
全体の中のthis
console.log(this); {}
this
.num = 10; console.log(this.num); 10 console.log(global.num); undefined
全体のthisはデフォルトでは空のオブジェクトです.そしてグローバルの中でthisはglobalオブジェクトと何の関係もないですが、全体の中のthisは一体誰を指していますか?この章の後半部分について説明します.
 
関数の中のthis
function fn(){
    this.num = 10;
}
fn();
console.log(this); {}
console.log(this.num); undefined
console.log(global.num); 10
関数の中でthisが指すのはglobalオブジェクトで、全体の中のthisとは同一のオブジェクトではなく、簡単に言えば、関数の中でthisによって定義される変数はglobalに属性を追加するのと同じです.
 
信じないなら、下のコードを見て証明できます.
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
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を指しています.
this.num = 10;
console.log(module.exports); {num:10}
console.log(module.exports.num);
どうして全体の局面の中でthisはmodule.exportsを指すことができて、それでは先にもっと多くmodule.exportに関しての知識を理解しなければなりません.しばらくはここを理解して、後でmoduleまで話をする機会があります.