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

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

Mary-Kate Olsen
Libérer: 2024-12-21 14:49:09
original
170 Les gens l'ont consulté

How Does the `new` Keyword Impact Object Inheritance in JavaScript?

Comprendre le « nouveau » mot-clé dans l'héritage d'objets

Lors de la création d'un héritage entre deux constructeurs d'objets, le mot-clé « nouveau » joue un rôle crucial . Explorons son objectif dans le contexte du code suivant :

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

Ici, l'objectif est d'étendre le constructeur Widget avec un nouveau constructeur WeatherWidget. En utilisant le mot-clé 'new', nous invoquons efficacement Widget en tant que constructeur et attribuons sa valeur de retour à la propriété prototype de WeatherWidget.

L'impact de l'omission de 'new'

Si nous devions omettre le mot-clé « nouveau » dans le code, le résultat serait différent. Sans « nouveau », Widget ne serait pas appelé en tant que constructeur à moins qu'une liste d'arguments ne soit ajoutée. De plus, appeler Widget de cette façon pourrait ne pas être possible dans le code en mode strict, car la référence « this » dans le constructeur pourrait être liée à l'objet global si l'implémentation est conforme à ECMAScript Ed. 5.x.

Problèmes potentiels liés à l'utilisation de « new »

Bien que l'utilisation de « new » nous permette de créer un héritage, elle peut également présenter des inconvénients. Par exemple, toutes les instances de WeatherWidget hériteront de la même instance du Widget. Cela signifie que toutes les valeurs de propriété héritées de l'instance Widget seront partagées entre toutes les instances WeatherWidget.

Approche alternative de l'héritage

Une manière plus appropriée d'implémenter l'héritage basé sur les classes dans les langages basés sur des prototypes consiste à utiliser l'approche suivante :

function Dummy () {}
Dummy.prototype = Widget.prototype;
WeatherWidget.prototype = new Dummy();
WeatherWidget.prototype.constructor = WeatherWidget;
Copier après la connexion

Cette approche garantit que les instances WeatherWidget héritent des propriétés via le prototype chaîne sans partager les valeurs de propriété entre eux. De plus, la propriété « constructeur » est correctement définie, de sorte que chaque instance de WeatherWidget pointe vers le bon constructeur.

ECMAScript 5 et versions ultérieures

Dans ECMAScript 5 et versions ultérieures, la syntaxe suivante peut être utilisée pour créer l'héritage :

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

Cette syntaxe a l'avantage de rendre le résultat Propriété 'constructor' non inscriptible, non énumérable et non configurable.

En conclusion, le mot-clé 'new' dans l'héritage d'objet sert un objectif spécifique, mais son utilisation doit être prudente pour éviter des problèmes potentiels. Des approches alternatives en matière d'héritage sont disponibles et offrent plus de flexibilité et de contrôle.

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