Maison >interface Web >js tutoriel >Pourquoi utiliser « new » dans « Derived.prototype = new Base » pour l'héritage JavaScript ?

Pourquoi utiliser « new » dans « Derived.prototype = new Base » pour l'héritage JavaScript ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-21 04:27:10260parcourir

Why Use `new` in `Derived.prototype = new Base` for JavaScript Inheritance?

Pourquoi utiliser le mot clé « nouveau » dans Derived.prototype = new Base ?

En JavaScript, l'héritage est réalisé via des prototypes. Pour étendre une classe existante, vous pouvez affecter le prototype de la classe enfant à une nouvelle instance de la classe parent. C'est là que le mot-clé 'nouveau' entre en jeu.

Dans le code suivant :

WeatherWidget.prototype = new Widget;

Le mot-clé 'nouveau' sert à deux fins :

  • Appelle la fonction constructeur : Il crée une nouvelle instance de la classe Widget. Cette instance devient le prototype de la classe WeatherWidget.
  • Définit la propriété Prototype : La valeur de retour de l'appel du constructeur (c'est-à-dire la nouvelle instance de Widget) est affectée à la propriété prototype de la classe WeatherWidget.

Que se passe-t-il si « nouveau » est laissé Out ?

Sans « nouveau », vous n'appelleriez pas le constructeur de widget. Au lieu de cela, vous devrez fournir une liste d'arguments pour Widget(). Cependant, cela peut ne pas être possible et entraîner des erreurs.

Importance de ne pas partager les propriétés

Par défaut, les instances de WeatherWidget partageraient les valeurs des propriétés de la même instance. de Widget. Cela peut entraîner un comportement inattendu, car plusieurs instances de WeatherWidget peuvent remplacer ou modifier les propriétés de chacune.

Pour éviter cela, il est recommandé d'utiliser un constructeur « factice » (par exemple, Dummy.prototype = Widget.prototype). comme étape intermédiaire, qui crée un nouveau prototype pour WeatherWidget qui n'hérite pas des valeurs de propriété de l'instance parent. Cela garantit que chaque instance de WeatherWidget possède son propre ensemble de propriétés héritées.

Approches alternatives dans les versions JavaScript plus récentes

Dans ECMAScript 5 et versions ultérieures, vous pouvez utiliser :

WeatherWidget.prototype = Object.create(Widget.prototype, {
  constructor: {value: WeatherWidget}
});

Cette approche présente l'avantage supplémentaire de rendre la propriété du constructeur non inscriptible, énumérable ou configurable.

Invocation explicite du constructeur parent

Vous devrez peut-être appeler explicitement le constructeur parent (par exemple, Widget.apply(this, arguments)) dans le constructeur enfant pour initialiser le parent exemple.

Conclusion

Comprendre l'utilisation de « new » dans Derived.prototype = new Base est crucial pour implémenter correctement l'héritage en JavaScript. Cela garantit que les classes enfants héritent du bon prototype et empêche le partage involontaire des valeurs de propriété entre les instances.

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