Le cas curieux des retours non-this dans les fonctions constructeur
Lors de l'appel d'une fonction constructeur avec le nouveau mot-clé, il est généralement supposé que la fonction renverra le nouveau créé objet. Cependant, dans des circonstances spécifiques, une valeur autre que this peut être renvoyée à la place.
En JavaScript, la condition exacte qui régit ce comportement est définie dans la propriété interne [[Construct]] de la spécification ECMAScript pour les objets fonction. Lorsqu'elle est appelée, cette propriété effectue les étapes suivantes :
- Crée un nouvel objet.
- Définit sa propriété [[Class]] comme "Objet".
- Récupère la valeur de la propriété prototype de la fonction constructeur.
4-5. Définit la propriété [[Prototype]] du nouvel objet sur la valeur du prototype (s'il s'agit d'un objet) ou sur l'objet prototype de l'objet d'origine dans le cas contraire.
- Appelle la propriété [[Call]] de la fonction constructeur, en utilisant le nouvel objet comme ceci, en passant les arguments du constructeur comme arguments.
7-8. Étape cruciale : Renvoie le nouvel objet si Type(Result(6)) n'est pas un objet, ou renvoie Result(1) (c'est-à-dire le nouvel objet créé à l'étape 1) sinon.
Par conséquent, la valeur renvoyée par la fonction constructeur déterminera si l'objet nouvellement créé est renvoyé ou non :
- Si le la valeur renvoyée est une primitive non-objet, le nouvel objet sera renvoyé.
- Si la valeur renvoyée est n'importe quel objet, celle-ci sera renvoyée à la place.
Pour tester si l'objet nouvellement créé est vraiment différent de celui renvoyé par le constructeur, on peut vérifier : (new Foo() instanceof Foo) === faux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!
Déclaration:Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn