Im folgenden Inhalt geht es um dies in NodeJS und nicht um dies in Javascript. Dies in NodeJS unterscheidet sich von dem in Javascript im Browser.
dies
im globalen Maßstabconsole.log(this); {} this.num = 10; console.log(this.num); 10 console.log(global.num); undefined
Dies ist in der globalen Welt standardmäßig ein leeres Objekt. Und im Globalen hat dies keine Beziehung zum globalen Objekt, also auf wen genau weist das im Globalen hin? Wir werden dies in der zweiten Hälfte dieses Kapitels erklären.
dies
in einer Funktionfunction fn(){ this.num = 10; } fn(); console.log(this); {} console.log(this.num); undefined console.log(global.num); 10
Dies in der Funktion zeigt auf das globale Objekt, das nicht dasselbe Objekt wie dieses in der Funktion ist. Einfach ausgedrückt entspricht die Variable, die Sie hierdurch in der Funktion definieren, dem Hinzufügen eines Attributs zu global. es ist dasselbe wie global. Das „dies“ in „hat nichts damit zu tun“.
Wenn Sie es nicht glauben, schauen Sie sich den Code unten an, um es zu beweisen.
function fn(){ function fn2(){ this.age = 18; } fn2(); console.log(this); global console.log(this.age); 18 console.log(global.age); 18 } fn();
Richtig, in der Funktion zeigt dies auf global.
dies
im Konstruktorfunction Fn(){ this.num = 998; } var fn = new Fn(); console.log(fn.num); 998 console.log(global.num); undefined
Im Konstruktor verweist dies auf seine Instanz, nicht auf global.
Wir können jetzt im globalen Kontext darüber sprechen, es hat tatsächlich etwas mit dem Umfang in Nodejs zu tun. Wenn Sie mehr über den Umfang in Nodejs erfahren möchten, können Sie dies lesen Diskussion über den Umfang in Nodejs Scope-Problem. dieser Artikel.
Zurück zum Thema, dies verweist im globalen Kontext auf module.exports.
this.num = 10; console.log(module.exports); {num:10} console.log(module.exports.num);
Warum verweist dies auf module.exports in der globalen Ansicht? Dann müssen Sie zunächst mehr über module.exports erfahren. Wir werden zunächst über module.exports sprechen später