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 __lookupSetter__()

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 en faveur de l'API Object.getOwnPropertyDescriptor(). Le comportement de cette méthode n'est défini que pour la compatibilité web, et il n'est pas obligatoire de l'implémenter sur toutes les plateformes. Elle peut ne pas fonctionner partout.

La méthode __lookupSetter__() des instances de Object retourne la fonction liée en tant que mutateur pour une propriété définie.

Syntaxe

js
__lookupSetter__(prop)

Paramètres

prop

Une chaîne de caractères contenant le nom de la propriété dont on souhaite obtenir le mutateur correspondant.

Valeur de retour

La fonction liée en tant que mutateur à la propriété définie. Retourne undefined si aucune propriété de ce type n'est trouvée, ou si la propriété est une propriété de données.

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 __lookupSetter__(). Si un mutateur a été défini pour une propriété d'un objet, il n'est pas possible de référencer la fonction du mutateur avec cette propriété, car cette propriété appelle uniquement la fonction lorsqu'elle est définie. __lookupSetter__() peut être utilisé pour obtenir une référence à la fonction du mutateur.

__lookupSetter__() parcourt la chaîne de prototypes pour trouver la propriété définie. Si un objet le long de la chaîne de prototypes possède sa propre propriété définie, l'attribut set du descripteur de propriété pour cette propriété est retourné. Si cette propriété est une propriété de données, undefined est retourné. Si la propriété n'est pas trouvée le long de toute la chaîne de prototypes, undefined est également retourné.

__lookupSetter__() 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 __lookupSetter__(), il doit également implémenter les méthodes __lookupGetter__(), __defineGetter__(), et __defineSetter__().

Exemples

Utiliser __lookupSetter__()

js
const obj = {
  set toto(valeur) {
    this.truc = valeur;
  },
};

obj.__lookupSetter__("toto");
// [Function: set toto]

Rechercher le mutateur d'une propriété de manière standard

Vous devez utiliser l'API Object.getOwnPropertyDescriptor() pour rechercher le mutateur d'une propriété. Contrairement à __lookupSetter__(), cette méthode permet de rechercher des propriétés de type symbole. La méthode Object.getOwnPropertyDescriptor() fonctionne également avec les objets avec prototype null, qui n'héritent pas de Object.prototype et ne disposent donc pas de la méthode __lookupSetter__(). Si le comportement de __lookupSetter__() consistant à parcourir la chaîne de prototypes est important, vous pouvez l'implémenter vous-même avec Object.getPrototypeOf().

js
const obj = {
  set toto(valeur) {
    this.truc = valeur;
  },
};

Object.getOwnPropertyDescriptor(obj, "toto").set;
// [Function: set toto]
js
const obj2 = {
  __proto__: {
    set toto(valeur) {
      this.truc = valeur;
    },
  },
};

function trouverMutateur(obj, prop) {
  while (obj) {
    const desc = Object.getOwnPropertyDescriptor(obj, prop);
    if (desc) {
      return desc.set;
    }
    obj = Object.getPrototypeOf(obj);
  }
}

console.log(trouverMutateur(obj2, "toto")); // [Function: set toto]

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# sec-object.prototype.__lookupSetter__

Compatibilité des navigateurs

Voir aussi