Le contenu suivant concerne cela dans nodejs plutôt que cela en javascript. Ceci dans nodejs est différent de cela en javascript dans le navigateur.
ce
en globalconsole.log(this); {} this.num = 10; console.log(this.num); 10 console.log(global.num); undefined
Ceci dans le monde global est un objet vide par défaut. Et dans le global, cela n’a aucun rapport avec l’objet global, alors à qui exactement cela pointe-t-il dans le global ? Nous expliquerons cela dans la seconde moitié de ce chapitre.
ce
dans une fonctionfunction fn(){ this.num = 10; } fn(); console.log(this); {} console.log(this.num); undefined console.log(global.num); 10
Ceci dans la fonction pointe vers l'objet global, qui n'est pas le même objet que celui-ci dans le global. En termes simples, la variable que vous définissez via ceci dans la fonction équivaut à ajouter un attribut à global. c'est la même chose que global. Le "ceci" dans "n'a rien à voir avec ça".
Si vous n'y croyez pas, regardez le code ci-dessous pour le prouver.
function fn(){ function fn2(){ this.age = 18; } fn2(); console.log(this); global console.log(this.age); 18 console.log(global.age); 18 } fn();
C'est vrai, dans la fonction, cela pointe vers global.
this
dans le constructeurfunction Fn(){ this.num = 998; } var fn = new Fn(); console.log(fn.num); 998 console.log(global.num); undefined
Dans le constructeur, cela pointe vers son instance, pas globale.
Nous pouvons maintenant en parler dans un contexte global. En parlant de cela dans un contexte global, cela a en fait quelque chose à voir avec la portée dans Nodejs. Si vous voulez en savoir plus sur la portée dans Nodejs, vous pouvez lire le document. discussion sur la portée dans le problème de portée de Nodejs. cet article.
Revenons au sujet, ceci dans le contexte global pointe vers module.exports.
this.num = 10; console.log(module.exports); {num:10} console.log(module.exports.num);
Pourquoi cela pointe-t-il vers module.exports dans la vue globale ? Ensuite, vous devez d'abord en savoir plus sur module.exports. Pour le moment, nous en apprendrons d'abord sur le module si nous en avons l'occasion. plus tard