Maison  >  Article  >  interface Web  >  Un constructeur JavaScript peut-il renvoyer des valeurs autres que l'objet construit ?

Un constructeur JavaScript peut-il renvoyer des valeurs autres que l'objet construit ?

DDD
DDDoriginal
2024-11-10 21:43:02551parcourir

Can a JavaScript Constructor Return Values Other Than the Constructed Object?

Valeurs de retour du constructeur et opérateur [Instanceof]

En JavaScript, une fonction constructeur peut renvoyer des valeurs autres que l'objet construit. Comprendre ces circonstances est crucial pour éviter les erreurs d'exécution telles que les résultats inattendus de l'opérateur instanceof.

La spécification ECMAScript 3e édition définit la propriété [[Construct]], qui régit le comportement du constructeur. Selon la spécification :

  • Étape 7 : Si la valeur de retour de la fonction constructeur (Result(6)) n'est pas un type d'objet, renvoyez Result(6).
  • Étape 8 : Sinon, renvoyez l'objet nouvellement construit (Result(1)).

Par conséquent, un constructeur peut renvoyer des valeurs non primitives (comme les fonctions ou tableaux) pour empêcher l'opérateur instanceof de renvoyer true.

Par exemple :

function Foo() {
  return [];
}

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

Puisque le constructeur renvoie un tableau (non-objet), la vérification instanceof échoue. À l'inverse, renvoyer une valeur primitive (comme null ou undefined) renverrait toujours true.

En résumé, les valeurs renvoyées par un constructeur peuvent affecter l'instance de résultat. En comprenant les conditions décrites dans la propriété [[Construct]], les développeurs peuvent éviter tout comportement inattendu et garantir une vérification précise de l'héritage de classe.

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