Maison > interface Web > js tutoriel > Comment fonctionne l'opérateur « nouveau » en JavaScript et comment crée-t-il des objets avec leurs chaînes de prototypes ?

Comment fonctionne l'opérateur « nouveau » en JavaScript et comment crée-t-il des objets avec leurs chaînes de prototypes ?

Patricia Arquette
Libérer: 2024-10-27 21:28:30
original
309 Les gens l'ont consulté

How does the `new` operator work in JavaScript, and how does it create objects with their prototype chains?

Comment fonctionne le nouvel opérateur en JavaScript ?

Le nouvel opérateur joue un rôle central dans le système de programmation orienté objet de JavaScript. Il est essentiel de comprendre ses fonctionnalités pour créer et gérer efficacement des objets.

Plongée dans la mise en œuvre du nouvel opérateur

<code class="javascript">new dataObj(args);</code>
Copier après la connexion

Cet extrait de code utilise le [[ Construct]] méthode pour effectuer une série d'actions spécifiques :

  1. Création d'objet : Il initialise un nouvel objet natif.
  2. Établissement d'une chaîne de prototypes : Le [[Prototype]] interne de cet objet est défini pour pointer vers la propriété Function prototype. Notamment, si la propriété du prototype de fonction n'est pas un objet (valeurs primitives telles que Nombre, Chaîne, Booléen, Undéfini ou Null), Object.prototype est utilisé comme prototype à la place.
  3. Invocation de fonction : Après la création de l'objet, la fonction est appelée avec l'objet nouvellement créé attribué comme valeur this.
  4. Gestion de la valeur de retour : Si la valeur de retour de la fonction invoquée renvoie une primitive , l'objet créé en interne est renvoyé. Cependant, si un objet est renvoyé, l'objet créé en interne est supprimé.

Une implémentation alternative pour plus de clarté

Pour améliorer la compréhension, voici une représentation alternative de ce que réalise le nouvel opérateur :

<code class="javascript">function NEW(f) {
  var obj, ret, proto;

  // Check if `f.prototype` is an object, not a primitive
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

  // Create an object that inherits from `proto`
  obj = Object.create(proto);

  // Apply the function setting `obj` as the `this` value
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  if (Object(ret) === ret) { // the result is an object?
    return ret;
  }
  return obj;
}

// Example usage:
function Foo (arg) {
  this.prop = arg;
}
Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');
obj.prop; // 'bar'
obj.inherited; // 'baz'
obj instanceof Foo // true</code>
Copier après la connexion

Dans cet exemple :

  • NEW est une fonction personnalisée qui simule le comportement du nouvel opérateur.
  • Il vérifie si la propriété du prototype de fonction est un objet, Object.prototype 来创建新对象。
  • NEW applique la fonction à l'objet nouvellement créé comme étant cette valeur.
  • La valeur de retour de la fonction détermine l'objet final à restituer.

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!

source:php.cn
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