Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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

js
__defineSetter__(prop, func)

Paramètres

prop

Une chaîne de caractères contenant le nom de la propriété à laquelle le mutateur func est lié.

func

Une fonction à appeler lorsqu'une tentative est faite pour définir la propriété définie. Cette fonction reçoit le paramètre suivant :

val

La valeur qu'on tente d'affecter à prop.

Valeur de retour

Aucune (undefined).

Exceptions

TypeError

Levée si func n'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__()

js
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.

js
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__().

js
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