La compréhension de cela a toujours été qu'elle peut être utilisée et peut être utilisée, mais elle n'a pas approfondi son essence. Cette fois, j'ai acquis une compréhension approfondie grâce à "JavaScript The Good Parts". (Tous les débogages sont visibles dans la console, touche F12 du navigateur)
Regardons cela ensemble.
Lorsque nous déclarons une fonction, en plus des paramètres (paramètres formels) lorsqu'elle est définie, chaque fonction aura également deux paramètres supplémentaires, l'un est ceci et l'autre est des arguments (paramètres réels). les arguments sont les paramètres réellement reçus par la fonction, qui sont un tableau de type tableau. Je donnerai seulement une brève introduction aux arguments, en me concentrant sur ce pointeur.
En programmation orientée objet, ceci est très important, et sa valeur dépend du mode d'appel. En JavaScript, il existe un total de 4 modes d'appel : le mode d'appel de méthode, le mode d'appel de fonction, le mode d'appel de constructeur et le mode d'appel d'application.
Mode d'appel de méthode
Lorsqu'une fonction est utilisée comme propriété d'un objet, nous appelons généralement la fonction une méthode de l'objet. Lorsque cette méthode est appelée, cela pointe vers l’objet auquel appartient la méthode.
Comme le montre la châtaigne, cela pointe vers l'objet sayName. Cette méthode d'obtention du contexte de l'objet via ceci est une méthode publique. (méthode publique)
Mode d'appel de fonction
Lorsqu'une fonction est appelée mais n'est pas une méthode sur un objet, alors elle est appelée en tant que fonction.
Lorsqu'elle est appelée dans ce mode, this pointera vers l'objet window, même si cette fonction peut être appelée dans une fonction externe, regardons un exemple.
En regardant les choses de cette façon, vous savez probablement comment résoudre "l'erreur de conception" de JavaScript.
Oui, mettez simplement ceci en cache dans la fonction étudiant, qui est la ligne 6. Transférez ensuite cela à la fonction sayName via une variable et vous pourrez le résoudre !
Mode d'appel du constructeur
Quand on parle de constructeurs en JavaScript, vous penserez : "Mettez le nom de la fonction en majuscule ! Utilisez l'opérateur new lors de l'appel !" La mise en majuscule du nom de la fonction est facile à comprendre, et c'est pour standardiser et unifier la dénomination des constructeurs. Mais avez-vous déjà réfléchi aux raisons pour lesquelles vous devez utiliser du nouveau ? Si vous appelez une fonction avec new devant, l'arrière-plan de la fonction créera un nouvel objet pointant vers le prototype de la fonction, et celui-ci sera également lié au nouvel objet. JavaScript est un langage basé sur l'héritage de prototypes. Les étudiants qui ne connaissent pas très bien le prototype peuvent vérifier les informations par eux-mêmes.
Voyons d’abord à quoi ressemble généralement un constructeur.
Cela n'a pas d'importance. Ne viens-je pas de dire que lorsqu'une fonction est appelée via new, elle fera de « mauvaises choses » en coulisses ?
Assurez-vous d'utiliser new pour appeler le constructeur, sinon il n'y aura aucun avertissement en cas de problème. Toutes les majuscules sont toujours très nécessaires.
Appliquer le mode d'appelLa méthode apply nous permet de construire un tableau de paramètres à transmettre à la fonction appelante, et nous permet également de modifier cette valeur.
function.apply (cette valeur liée, tableau de paramètres d'arguments)
Il y a trop de choses à dire sur la candidature, je vais seulement vous donner quelques exemples pour vous aider à comprendre :
Nous pouvons facilement modifier cet objet de liaison de la fonction via apply. La méthode d'appel, qui est similaire à apply, a également le même effet. Les étudiants intéressés peuvent le rechercher et l'apprendre par eux-mêmes.
D'accord, nous avons enfin fini de parler des quatre modes d'appel pour changer cela. Le mode d'appel de méthode et le mode d'appel de constructeur seront davantage utilisés et sont plus importants. Quant au mode d'appel de fonction, nous devons apprendre à les éviter. .
S'il y a des erreurs, veuillez les signaler à temps et je les corrigerai dès que possible pour éviter d'induire les autres en erreur. Merci !