Je l'ai utilisé lors de l'interview il y a quelques jours. L'intervieweur a dit que ma compréhension était un peu biaisée. Je suis retourné lire le livre et quelques blogs, et j'ai fait quelques tests. J'ai trouvé que ma compréhension était en effet fausse.
1. Variables globales
Ce devrait être le plus couramment utilisé. Appelez cela dans la fonction, et c'est en fait une variable globale
var valeur = "0"; fonction mei () {var value = "1"; console.log (this.value); // 0 console.log (valeur); // 1} mei ();La sortie est 0 parce que cela pointe vers le global
2. Constructeur
C'est l'utilisation que je connais davantage. Utilisez-le dans le constructeur. Après un nouvel objet, cela pointe vers ce nouvel objet.
var valeur = "fenêtre"; fonction mei () {this.value = 1; this.show = function () {console.log (this.value)}} var m = new mei (); console.log (m.value); // 1 M.Show (); // 1Vous pouvez voir que la sortie est 1 au lieu de la fenêtre. On peut voir qu'en raison du constructeur, cela a indiqué ici un nouvel objet au lieu d'une variable globale.
3. calez et appliquez
Emprunter les exemples à mon appel et appliquer directement le blog
var p = "456"; fonction f1 () {this.p = "123"; } fonction f2 () {console.log (this.p); } f2 (); // 456 f2.Call (f1 ()); // 123 f2.Apply (f1 ()); // 123La sortie de la première ligne est facile à comprendre. Cela pointe vers le monde. Le 123 est dû au fait qu'après avoir utilisé l'appel ou la possibilité, ceci en F2 pointe vers F1, et P en F1 est 123. Veuillez cliquer sur le billet de blog pour plus de détails.
4. La fonction est appelée méthode d'un objet (où j'ai fait une erreur)
À ce moment-là, je me suis demandé d'écrire un objet avec plusieurs méthodes. J'ai défini une variable globale dans mon esprit, puis j'ai appelé cela dans la méthode de l'objet. L'intervieweur m'a demandé ce que c'était? J'ai dit que ce devrait être une fenêtre, parce que j'ai très peu utilisé cette méthode, et je pensais que seul nouveau ou l'appel changerait la direction de cela, alors il a dit que c'était mal et m'a demandé de revenir en arrière et de le voir moi-même. Maintenant, je l'ai essayé, je me trompe vraiment. Publier le code
var valeur = "père"; fonction mei () {} mei.value = "child"; mei.get = function () {console.log (this.value)}; mei.show = function () {console.log (valeur)}; mei.get (); // enfant mei.show (); //pèreDepuis que GET est appelé comme méthode de MEI, cela indique ici mei.Value So Output Child
Quant au père, je comprends de cette façon. La fonction indiquée par le spectacle est définie dans l'environnement mondial. En raison de la chaîne de portée, aucune valeur n'est trouvée dans le spectacle, donc je définis son environnement et je le trouve. Cela trouve la valeur globale. S'il y a une erreur dans la compréhension ici, j'espère qu'un ami pourra le signaler!