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

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 __defineGetter__() des instances de Object lie une propriété d'objet à une fonction qui est appelée lorsque cette propriété est consultée.

Syntaxe

js
__defineGetter__(prop, func)

Paramètres

prop

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

func

Une fonction à lier à une consultation de la propriété définie.

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 __defineGetter__(). Cette méthode permet de définir un accesseur sur un objet préexistant. Cela équivaut à Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }), ce qui signifie que la propriété est énumérable et configurable, et que tout mutateur existant, le cas échéant, est conservé.

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

Exemples

Utiliser __defineGetter__()

js
const o = {};
o.__defineGetter__("gimmeFive", function () {
  return 5;
});
console.log(o.gimmeFive); // 5

Définir un accesseur de propriété de manière standard

Vous pouvez utiliser la syntaxe get pour définir un accesseur lorsque l'objet est initialisé pour la première fois.

js
const o = {
  get gimmeFive() {
    return 5;
  },
};
console.log(o.gimmeFive); // 5

Vous pouvez également utiliser Object.defineProperty() pour définir un accesseur sur un objet après sa création. Comparé à __defineGetter__(), cette méthode permet de contrôler l'énumérabilité et la capacité de configuration de l'accesseur, 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 __defineGetter__().

js
const o = {};
Object.defineProperty(o, "gimmeFive", {
  get() {
    return 5;
  },
  configurable: true,
  enumerable: true,
});
console.log(o.gimmeFive); // 5

Spécifications

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

Compatibilité des navigateurs

Voir aussi