Je l'ai utilisé lors d'une interview il y a quelques jours. L'intervieweur a dit que ma compréhension était un peu fausse. Je suis revenu et j'ai lu des livres et des blogs, j'ai fait des tests et j'ai découvert que ma compréhension était effectivement fausse
1. Variables globales
devrait être le plus couramment utilisé. Ceci est appelé dans une fonction, qui est en fait une variable globale
.var value="0"; function mei(){ var value="1"; console.log(this.value); //0 console.log(value); //1 } mei();
La sortie est 0 car cela pointe vers le global
2.Constructeur
C'est une utilisation avec laquelle je suis plus familier. Utilisez ceci dans le constructeur. Après avoir créé un nouvel objet, cela pointera vers le nouvel objet
var value="window"; function mei(){ this.value=1; this.show=function(){ console.log(this.value) } } var m=new mei(); console.log(m.value); //1 m.show(); //1
Vous pouvez voir que la sortie est 1 au lieu de window. On peut voir qu'en raison du constructeur, cela pointe déjà ici vers un nouvel objet au lieu d'une variable globale
3.appelez et postulez
Empruntez directement les exemples de mon appel et postulez sur le blog
var p="456"; function f1(){ this.p="123"; } function f2() { console.log(this.p); } f2(); //456 f2.call(f1()); //123 f2.apply(f1()); //123
La première ligne génère 456, ce qui est facile à comprendre. Cela indique la situation globale. Le 123 suivant est dû au fait qu'après avoir utilisé call ou apply, ceci dans f2 pointe vers f1, et p dans f1 est 123. Pour une explication spécifique. , cliquez simplement sur cet article Blog
4. La fonction est appelée comme méthode d'un objet (là où je me suis trompé)
On m'a demandé d'écrire un objet avec plusieurs méthodes. J'ai soudainement défini une variable globale, puis je l'ai utilisée pour l'appeler dans la méthode de l'objet. L'intervieweur m'a demandé ce que c'était ? J'ai dit que cela devrait être une fenêtre, car j'utilise rarement cette méthode, et j'ai pensé que seul un nouveau ou un appel changerait la direction de cela. Il a dit que c'était faux et m'a demandé de revenir en arrière et de voir par moi-même maintenant que je l'ai essayé. , j'avais vraiment tort. Code postal
var value="father"; function mei(){} mei.value="child"; mei.get=function(){console.log(this.value)}; mei.show=function(){console.log(value)}; mei.get(); //child mei.show(); //father
Puisque get est appelé comme méthode de mei, ceci pointe ici vers mei.value, donc child est sorti
Quant à père, je le comprends ainsi. La fonction pointée par show est définie dans l'environnement global En raison de la chaîne de portée, la valeur ne se trouve pas dans show, donc je la recherche dans l'environnement où elle est. est défini, puis je trouve la valeur de l'environnement global, s'il y a un malentendu ici, j'espère que quelqu'un pourra le signaler !