Maison >interface Web >js tutoriel >Object.create : une meilleure façon d'instancier des objets que « nouveau » ?

Object.create : une meilleure façon d'instancier des objets que « nouveau » ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-16 20:02:03964parcourir

Object.create: A Better Way to Instantiate Objects Than `new`?

Object.create : une nouvelle façon d'instancier des objets

Javascript 1.9.3 / ECMAScript 5 a introduit Object.create, une méthode fortement préconisée par Douglas Crockford et d'autres. Cette méthode offre une alternative au mot-clé new traditionnel lors de l'instanciation d'objets.

Pour remplacer new par Object.create, examinons le code suivant :

var UserA = function(nameParam) {
    this.id = MY_GLOBAL.nextId();
    this.name = nameParam;
}
UserA.prototype.sayHello = function() {
    console.log('Hello '+ this.name);
}
var bob = new UserA('bob');
bob.sayHello();

En supposant que MY_GLOBAL.nextId existe, nous peut instancier UserA à l'aide de Object.create comme suit :

var userB = {
    sayHello: function() {
        console.log('Hello '+ this.name);
    }
};

var bob = Object.create(userB, {
    'id' : {
        value: MY_GLOBAL.nextId(),
        enumerable: true
    },
    'name': {
        value: 'Bob',
        enumerable: true
    }
});

Avantages de Object.create

L'un des avantages d'Object.create par rapport à new est qu'il permet l'héritage différentiel. Les objets peuvent directement hériter des propriétés d'autres objets sans avoir besoin d'une chaîne de prototypes. Cela se fait en passant un objet comme deuxième argument à Object.create, où vous pouvez définir les propriétés héritées.

Un autre avantage est sa flexibilité. Object.create vous permet de définir des attributs de propriété (énumérables, inscriptibles, configurables) à l'aide de la syntaxe des descripteurs de propriétés, vous offrant ainsi un meilleur contrôle sur le comportement des propriétés des objets.

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