Vous êtes sur la page 1sur 10

O b j e c t .

d e f i n e P ro p e r t i e s
Object.defineProperties(obj , props)

O b j e c t . d e f i n e P ro p e r t y
Object.defineProperty (obj , prop , descriptor)

J AVA S C R I P T (Programmation Internet)

J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga


+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818
La dernière révision de ce texte est disponible sur CD.

I. Object . defineProperties

« Object . defineProperties ( ) », méthode de l’objet transcendant


« Object », permet de créer (définir) une ou plusieurs nouvelle(s) pro-
priété(s), ou de modifier une ou plusieurs autres propriété préexistantes
d’un objet donné, en retournant l’objet modifié.

Syntaxe :

Object.defineProperties(obj, props)

« obj » : objet (soit-il vide) auquel on veut ajouter ou dont on veut modi-
fier une ou plusieurs propriétés.

« props » encore un objet, dont les clés (membres ou éléments) sont les
attributs ou « descripteurs » (énumérables), des propriétés qu’on veut
modifier ou ajouter.

const obj = {};

Object.defineProperties(obj, {
property1: {
value: "prop1Value",
attributs
J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V
},
property2: {}
});

« Object . defineProperties ( ) » : version à deux arguments, le premier


argument étant l’objet en question, et le deuxième étant un objet qui ren-
ferme les propriétés à définir ou à redéfinir.

Les descripteurs (à définir ou à redéfinir) sont eux-mêmes des objets


peuvent être des « data descriptors » ou des « accessor descriptors »
dont les clés (membres ou éléments) sont :

1. value : la valeur de l’objet, celle qui est automatiquement affi-


chée quand on lit l’objet, ou qu’on modifie lors d’une affectation.
Par exemple avec « console . log ( objet . property ) » ou « ob-
jet . property = val ». Valeur par défaut = undefined.

2. configurable : si « true », le type du descripteur de cette pro-


priété peut être modifié , et cette propriété peut être supprimée de
l’objet. Valeur par défaut = false.

3. enumerable : Si « true », la propriété s’affiche lors d’une énu-


mération des propriétés de l’objet avec une boucle « for…in » ou
avec « Object . keys ». Valeur par défaut = false.

4. writable : Si « true », on peut affecter une nouvelle valeur à la


propriété. Valeur par défaut = false.

5. get : Fonction jouant le rôle de « getter » pour la propriété. La


valeur qu’elle retourne est la valeur de la propriété. Valeur par
défaut = undefined.

6. set : Fonction jouant le rôle de « setter » pour la propriété. Son


unique argument est la nouvelle valeur à affecter à la propriété.
Valeur par défaut = undefined.

defineProperty, defineProperties - 2/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V
<script type="text/javascript"> "use strict";
const objet = {};

let r = Object.defineProperties(objet, {
property1: {
value: "prop1Value",
writable: true,
enumerable: false
}
,
property2: {
value: "prop2Value"
}
,
property3: {
value: "prop3Value",
writable: true,
configurable: true
}
});

console.log(r);
console.log(
objet.property1,
objet.property2,
objet.property3);
</script>

defineProperty, defineProperties - 3/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V

II. Object . defineProperty

« Object . defineProperty ( ) », méthode de l’objet transcendant « Ob-


ject », permet de créer (définir) une nouvelle propriété, ou de modifier
une autre propriété préexistante d’un objet donné, en retournant l’objet
modifié.

Syntaxe :

Object.defineProperty(obj, prop, descriptor)

« obj » : objet (soit-il vide) auquel on veut ajouter ou dont on veut modi-
fier une ou plusieurs propriétés.

« prop » encore un objet, la propriété à ajouter ou à modifier, et dont


les clés (membres ou éléments) sont les attributs ou descripteurs de la
propriété.

« descriptor » descripteur de la propriété à ajouter ou à modifier.

Une façon de définir une propriété d’un objet, le descripteur est ici défi-
nit isolément.

<script type="text/javascript"> "use strict";


// Littéral d'objet vide
var obj = {};

// Un autre objet, nommé « descriptor »


// Par défaut non enumerable,
// non configurable, non writable.
var descriptor = Object.create(null);

// Définit directe d'une nouvelle propriété


// « value » pour l'objet « descriptor »

defineProperty, defineProperties - 4/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V
// avec la valeur « valueValue »
descriptor.value = 'valueValue';

// Avec « Object.defineProperty » on définit


// la propriété arbitrairement nommé ici
// « cle » pour l'objet obj.
// La description de la clé ou propriété
// « cle » est contenue dans le descripteur
// « descriptor » qui est aussi un objet.
Object.defineProperty(obj, 'cle', descriptor);

console.dir(obj);

// obj.cle=55;
// TypeError: "cle" is read-only
</script>

Cette façon de définir isolément un descripteur est plus claire et facile à


suivre qu’une définition « inline ».

Même définition du descripteur mais inline et explicite :

<script type="text/javascript"> "use strict";


// Littéral d'objet vide
var obj = {};

Object.defineProperty(obj, 'cle', {
enumerable: false,
configurable: false,
writable: false,
value: 'valueValue',

});

defineProperty, defineProperties - 5/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V

console.dir(obj);

// obj.cle=55;
// TypeError: "cle" is read-only
</script>

Avec « set » et « get » : accessor property descriptor.

<script type="text/javascript"> "use strict";


// Littéral d'objet.
var obj = {v:null};

Object.defineProperty(obj, 'cle', {
enumerable: false,
configurable: false,
// writable: false,
// value: 'valueValue',
set(newVal) {
console.log("Dans « set »");
this.v = newVal;
},
get() {
console.log("Dans « get »");
return this.v;
}
});

console.dir("obj=",obj);
console.dir("obj.cle=",obj.cle);
console.dir("obj['cle']=",obj['cle']);
console.log("obj.v = Date.now()=",obj.v = Date.now());

defineProperty, defineProperties - 6/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V
console.log("obj.v=",obj.v);

// obj.cle=55;
// TypeError: "cle" is read-only
</script>

Définition de descripteur via un callBack :

<script type="text/javascript"> "use strict";


// descrFct est une fonction,
// donc un objet, donc peut avoir
// des propriétés (ayant des descriptors).

//
// Cette fonction retourne l'objet « d » qui
// peut donc être (et l'est effectivement ici)
// utilisé comme descripteur (puisqu'il est à
// la position de descripteur en argument).
//

// Littéral d'objet vide auquel on va


// ajouter la propriété nommée 'cle'
var obj = {};

const descrFct = function(p) {


var d = // d = Variable locale « d » qui prend
// l'adresse du descripteur de descrFct

defineProperty, defineProperties - 7/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V
descrFct.d = { // .d = Descriptor dans descrFct
enumerable: false, // Attributs de .d
writable: false,
configurable: false,
value: "DUMMYneoDescrFct"
};
console.log("*** d=",d); // Affiche d.value
d.value = p;
console.log("*** d=",d); // Affiche nvlle d.value
return d; // Le descriptor de descrFct,
// deviendra le descripteur de « cle »
// qui deviendra ainsi une propriété.
};

// Définition d'une nouvelle propriété via callBack


Object.defineProperty(obj,
'cle', descrFct('valueValue'));
// Fin Définition nouvelle propriété via callBack

console.dir(`descrFct= `,descrFct);
console.dir("obj=",obj);
console.dir("obj.cle=",obj.cle);

obj.cle=55;
// TypeError: "cle" is read-only
// pcq « writable = false »
</script>

defineProperty, defineProperties - 8/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V

Kinshasa, le 22 janvier 2019 (9:15:26 AM).

Mots-clés :

Getter, Setter, get, set, this, inline, callback, accessor property de-
scriptor n accessor, property, descriptor , descripteur, definegetter,
definesetter, defineProperty, getOwnPropertyNames, javascript,
ecmascript

DIASOLUKA Nz. Luyalu


Docteur en Médecine, Chirurgie & Accouchements (1977),
CNOM : 0866 - Spécialiste en ophtalmologie (1980)
Études humanités : Scientifique - Mathématiques & Physique.
Informaticien-amateur, Programmeur et WebMaster.

Chercheur indépendant, autonome et autofinancé, bénévole, sans


aucun conflit d’intérêt ou liens d'intérêts ou contrainte
promotionnelle avec qui qu’il soit ou quelqu’organisme ou
institution / organisation que ce soit, étatique, paraétatique ou privé,
industriel ou commercial en relation avec le sujet présenté.

+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818

diasfb@mail2world.com

defineProperty, defineProperties - 9/10 - mardi, 22. janvier 2019


J.D.B. DIASOLUKA Nz. Luyalu JavaScript Tome-V

defineProperty, defineProperties - 10/10 - mardi, 22. janvier 2019

Vous aimerez peut-être aussi