Object : méthode __defineSetter__()
Obsolète
Évitez d'utiliser cette fonctionnalité dans de nouveaux projets. TC39 included accessor methods in Annex B of the ECMAScript specification, which covers JavaScript features with "one or more undesirable characteristics and in the absence of legacy usage would be removed." Cette fonctionnalité peut être candidate à la suppression des standards web ou des navigateurs.>
Note :
Cette fonctionnalité est obsolète et il est préférable d'utiliser les accesseurs en utilisant la syntaxe d'initialisation d'objet ou l'API Object.defineProperty(). Le comportement de cette méthode n'est défini que pour la compatibilité web et n'est pas obligatoire à implémenter sur toutes les plateformes. Elle peut ne pas fonctionner partout.
La méthode __defineSetter__() des instances de Object lie une propriété d'objet à une fonction qui est appelée lorsqu'une tentative est faite pour définir cette propriété.
Syntaxe
__defineSetter__(prop, func)
Paramètres
Valeur de retour
Aucune (undefined).
Exceptions
TypeError-
Levée si
funcn'est pas une fonction.
Description
Tous les objets qui héritent de Object.prototype (c'est-à-dire tous sauf les objets avec prototype null) héritent de la méthode __defineSetter__(). Cette méthode permet de définir un mutateur sur un objet préexistant. Cela équivaut à Object.defineProperty(obj, prop, { set: func, configurable: true, enumerable: true }), ce qui signifie que la propriété est énumérable et configurable, et que tout accesseur existant, le cas échéant, est conservé.
__defineSetter__() est défini dans la spécification comme « normative optional », ce qui signifie qu'aucune implémentation n'est requise pour la mettre en œuvre. Cependant, tous les principaux navigateurs l'implémentent, et en raison de son utilisation continue, il est peu probable qu'elle soit supprimée. Si un navigateur implémente __defineSetter__(), il doit également implémenter les méthodes __lookupGetter__(), __lookupSetter__(), et __defineGetter__().
Exemples
>Utiliser __defineSetter__()
const o = {};
o.__defineSetter__("value", function (val) {
this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
Définir un mutateur de propriété de manière standard
Vous pouvez utiliser la syntaxe set pour définir un mutateur lorsque l'objet est initialisé pour la première fois.
const o = {
set value(val) {
this.anotherValue = val;
},
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
Vous pouvez également utiliser Object.defineProperty() pour définir un mutateur sur un objet après sa création. Comparé à __defineSetter__(), cette méthode permet de contrôler l'énumérabilité et la capacité de configuration du mutateur, ainsi que de définir des propriétés de symbole. La méthode Object.defineProperty() fonctionne également avec des objets avec prototype null, qui n'héritent pas de Object.prototype et n'ont donc pas la méthode __defineSetter__().
const o = {};
Object.defineProperty(o, "value", {
set(val) {
this.anotherValue = val;
},
configurable: true,
enumerable: true,
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
Spécifications
| Spécification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__defineSetter__> |
Compatibilité des navigateurs
Voir aussi
- La prothèse d'émulation de
Object.prototype.__defineSetter__danscore-js(angl.) - La méthode
Object.prototype.__defineGetter__() - L'opérateur
set - La méthode
Object.defineProperty() - La méthode
Object.prototype.__lookupGetter__() - La méthode
Object.prototype.__lookupSetter__() - Guide JavaScript : Définir des accesseurs et mutateurs
- Bogue Firefox 647423 (angl.)