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;
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;
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} });
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!