Maison > interface Web > js tutoriel > Pourquoi une fonction constructeur renvoie-t-elle parfois une valeur autre que celle-ci ?

Pourquoi une fonction constructeur renvoie-t-elle parfois une valeur autre que celle-ci ?

Susan Sarandon
Libérer: 2024-11-11 12:53:02
original
1107 Les gens l'ont consulté

Why Does a Constructor Function Sometimes Return a Non-this Value?

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 :

  1. Crée un nouvel objet.
  2. Définit sa propriété [[Class]] comme "Objet".
  3. 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.
  4. 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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal