Maison  >  Article  >  interface Web  >  Les constructeurs peuvent-ils renvoyer des valeurs autres que « ceci » ?

Les constructeurs peuvent-ils renvoyer des valeurs autres que « ceci » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-14 13:01:02552parcourir

Can Constructors Return Values Other Than

Valeurs de retour pour les constructeurs qui contournent la référence "this"

Lors de l'appel d'un constructeur à l'aide du nouveau mot-clé, le comportement par défaut est pour le constructeur pour renvoyer l'objet nouvellement créé (appelé "this"). Cependant, il existe des circonstances spécifiques dans lesquelles un constructeur peut renvoyer une valeur différente, empêchant ainsi l'affectation de « this » à l'objet nouvellement créé.

Selon la spécification ECMAScript, étape 8 de [[Construct]] La propriété interne définit le comportement de retour comme suit :

Si le type de la valeur renvoyée par la fonction constructeur (Result(6)) n'est pas un Objet :

- The value returned by the constructor will be returned instead of "`this`".

Par conséquent, pour renvoyer une valeur autre que "this" à partir d'un constructeur :

  1. Renvoyer une primitive non-objet (telle qu'une chaîne, nombre, ou booléen) : Si la valeur renvoyée est une primitive, elle ne sera pas interprétée comme un objet, et donc le nouvel objet ne sera pas renvoyé.
  2. Renvoyer un objet personnalisé ou une valeur non nulle avec un type autre que Object : Cela peut être réalisé en utilisant la méthode Object.create() ou en attribuant un prototype différent à l'objet créé.

Exemple :

function Foo() {
    return { name: "sample" };
}

var foo = new Foo();
console.log(foo instanceof Foo); // false

Dans ce cas, puisque le constructeur Foo renvoie un objet qui n'est pas une instance du constructeur Foo (nouvelle instance Foo() de Foo) sera évaluée à false.

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