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

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 __lookupGetter__() des instances de Object retourne la fonction liée en tant qu'accesseur pour une propriété définie.

Syntaxe

js
__lookupGetter__(prop)

Paramètres

prop

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

Valeur de retour

La fonction liée en tant qu'accesseur à 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 __lookupGetter__(). Si un accesseur a été défini pour une propriété d'un objet, il n'est pas possible de référencer la fonction de l'accesseur avec cette propriété, car cette propriété fait référence à la valeur de retour de cette fonction. __lookupGetter__() peut être utilisé pour obtenir une référence à la fonction de l'accesseur.

__lookupGetter__() 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 get 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é.

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

Exemples

Utiliser __lookupGetter__()

js
const obj = {
  get toto() {
    return Math.random() > 0.5 ? "toto" : "truc";
  },
};

obj.__lookupGetter__("toto");
// [Function: get toto]

Rechercher l'accesseur d'une propriété de manière standard

Vous devez utiliser l'API Object.getOwnPropertyDescriptor() pour rechercher l'accesseur d'une propriété. Contrairement à __lookupGetter__(), 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 __lookupGetter__(). Si le comportement de __lookupGetter__() consistant à parcourir la chaîne de prototypes est important, vous pouvez l'implémenter vous-même avec Object.getPrototypeOf().

js
const obj = {
  get toto() {
    return Math.random() > 0.5 ? "toto" : "truc";
  },
};

Object.getOwnPropertyDescriptor(obj, "toto").get;
// [Function: get toto]
js
const obj2 = {
  __proto__: {
    get toto() {
      return Math.random() > 0.5 ? "toto" : "truc";
    },
  },
};

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

console.log(trouverAccesseur(obj2, "toto")); // [Function: get toto]

Spécifications

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

Compatibilité des navigateurs

Voir aussi