Méthodes d'objet ES5 JavaScript

ECMAScript 5 (2009) a ajouté de nombreux nouveaux méthodes d'objets à JavaScript.

Gestion de l'objet

// Crée un objet avec l'objet existant comme prototype
Object.create()
// Ajoute ou modifie les propriétés de l'objet
Object.defineProperty(object, property, descriptor)
// Ajoute ou modifie les propriétés de l'objet
Object.defineProperties(object, descriptors)
// Accès à la propriété
Object.getOwnPropertyDescriptor(object, property)
// Retourne un tableau de toutes les propriétés
Object.getOwnPropertyNames(object)
// Accès à l'original
Object.getPrototypeOf(object)
// Retourne un tableau des propriétés enumerable
Object.keys(object)

Protection de l'objet

// Empêche l'ajout de propriétés à l'objet
Object.preventExtensions(object)
// Retourne true si les propriétés peuvent être ajoutées à l'objet
Object.isExtensible(object)
// Empêche la modification des propriétés de l'objet (pas des valeurs)
Object.seal(object)
// Retourne true si l'objet est scellé
Object.isSealed(object)
// Empêche toute modification de l'objet
Object.freeze(object)
// Retourne true si l'objet est gelé
Object.isFrozen(object)

Modification de la valeur de la propriété

Syntaxe

Object.defineProperty(object, property, {value : value)

Instance

Exemple de modification de la valeur de la propriété :

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// Modification de la propriété
Object.defineProperty(person, "language", {value : "NO"});

Essayez-le vous-même

Modification des métadonnées

ES5 permet de modifier les métadonnées des propriétés suivantes :

writable : true      // La valeur de la propriété peut être modifiée
enumerable : true    // Propriété enumerable
configurable : true  // Propriété réconfigurable
writable : false     // La valeur de la propriété ne peut pas être modifiée
enumerable : false   // Propriété non enumerable
configurable : false // La propriété ne peut pas être réconfigurée

ES5 permet de modifier getter et setter :

// Définition du getter
get: function() { return language }
// Définition du setter
set: function(value) { language = value }

Dans cet exemple, language est configuré en lecture seule :

Object.defineProperty(person, "language", {writable:false});

Dans cet exemple, language est rendu non enumerable :

Object.defineProperty(person, "language", {enumerable:false});

Répertorier toutes les propriétés

Dans cet exemple, toutes les propriétés de l'objet sont répertoriées :

Instance

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person);  // Retourne un tableau de tableaux

Essayez-le vous-même

Répertorier les propriétés enumerables

Dans cet exemple, seules les propriétés enumerables de l'objet sont répertoriées :

Instance

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person);  // Retourne un tableau des propriétés enumerables

Essayez-le vous-même

Ajout de propriété

Dans cet exemple, une nouvelle propriété est ajoutée à l'objet :

Instance

// Création de l'objet
const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// Ajout de propriété
Object.defineProperty(person, "year", {value:"2008"});

Essayez-le vous-même

Ajouter Getter et Setter

Object.defineProperty() La méthode peut également être utilisée pour ajouter Getter et Setter :

Instance

// Création de l'objet
const person = {firstName:"Bill", lastName:"Gates"};
// Définition du getter
Object.defineProperty(person, "fullName", {
  get: function () {return this.firstName + " " + this.lastName;}
});

Essayez-le vous-même

Une instance de compteur

// Définition de l'objet
const obj = {counter:0};
// Définition du setter
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (i) {this.counter -= i;}
});
// Opérations sur le compteur :
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

Essayez-le vous-même