Maison > interface Web > js tutoriel > Quel est l'impact du « nouveau » mot-clé sur l'héritage basé sur des prototypes en JavaScript ?

Quel est l'impact du « nouveau » mot-clé sur l'héritage basé sur des prototypes en JavaScript ?

Barbara Streisand
Libérer: 2024-12-14 15:34:22
original
879 Les gens l'ont consulté

How Does the `new` Keyword Impact Prototype-Based Inheritance in JavaScript?

Héritage basé sur un prototype : exploration du rôle du « nouveau » mot-clé

Lors de l'extension d'une classe Widget avec une nouvelle fonction nommée WeatherWidget, le mission de prototype :

WeatherWidget.prototype = new Widget;
Copier après la connexion

joue un rôle crucial. Le mot-clé 'new' appelle le constructeur Widget et attribue sa valeur de retour à la propriété prototype de WeatherWidget.

Si elle est omise, cette action générerait une erreur ou polluerait éventuellement l'espace de noms global. En utilisant « new », le constructeur du Widget est invoqué, garantissant une initialisation correcte et une valeur de retour valide.

Cependant, cette approche crée un scénario dans lequel toutes les instances de WeatherWidget héritent des propriétés de la même instance du Widget, partageant des valeurs entre elles. . Cela peut ne pas correspondre aux principes d'héritage.

Pour résoudre ce problème et mettre en œuvre un véritable héritage basé sur les classes, les étapes suivantes doivent être suivies :

  1. Créer un objet factice :
function Dummy () {}
Dummy.prototype = Widget.prototype;
Copier après la connexion
  1. Attribuer le Prototype :
WeatherWidget.prototype = new Dummy();
Copier après la connexion
  1. Corriger le constructeur :
WeatherWidget.prototype.constructor = WeatherWidget;
Copier après la connexion

Cette approche garantit que les instances WeatherWidget héritent des propriétés à travers la chaîne de prototypes sans partager de valeurs entre eux.

Pour une solution plus concise dans ECMAScript Ed. 5 et versions ultérieures, envisagez d'utiliser :

WeatherWidget.prototype = Object.create(Widget.prototype, {
  constructor: {value: WeatherWidget}
});
Copier après la connexion

Alternativement, pour une implémentation d'héritage généralisée, explorez Function.prototype.extend(). Cette méthode permet une augmentation facile du prototype et fournit une fonction d'accès « super » pratique pour appeler les méthodes parent.

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