Maison >interface Web >js tutoriel >Que se passe-t-il lorsqu'un constructeur JavaScript renvoie une valeur non-objet ?

Que se passe-t-il lorsqu'un constructeur JavaScript renvoie une valeur non-objet ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-13 10:16:02265parcourir

What Happens When a JavaScript Constructor Returns a Non-Object Value?

Comprendre les valeurs de retour des constructeurs en JavaScript

En JavaScript, les constructeurs sont invoqués à l'aide du nouveau mot-clé pour créer de nouveaux objets. Bien que le constructeur renvoie généralement ceci, certaines conditions peuvent entraîner le renvoi de valeurs différentes.

Circonstances du renvoi de valeurs autres que This

Le comportement est défini par le [ Propriété [Construct]] utilisée par le nouvel opérateur. Selon la spécification ECMA-262 3e édition :

Étape 7 : Si le type de la valeur renvoyée par la fonction constructeur (Result(6)) est non un objet, retournez Result(6).
Étape 8 : Sinon, retournez Result(1) (le nouvel objet).

Exemple :

Considérez le constructeur suivant :

function Foo() {
  return 1;
}

Lorsqu'il est invoqué avec new, les étapes suivantes se produisent :

  • Un nouvel objet est créé et le prototype de Foo est défini comme son prototype.
  • Foo.call(newObj, args) est invoqué (dans ce cas, il n'y a aucun argument).
  • Foo renvoie 1.
  • Puisque 1 n'est pas un Objet, l'étape 7 est exécutée et 1 est renvoyé par le constructeur.

Ainsi, (nouvelle instance Foo() de Foo) === false car Foo a renvoyé un nombre, pas un objet.

Conclusion :

Lorsqu'un constructeur renvoie une valeur non-objet (par exemple, une primitive, nulle, non définie), celle-ci n'est pas renvoyée et le la valeur renvoyée par la fonction constructeur est renvoyée à la place.

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