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
__defineGetter__(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 __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__()
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.
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__().
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
- La prothèse d'émulation de
Object.prototype.__defineGetter__danscore-js(angl.) - La méthode
Object.prototype.__defineSetter__() - L'opérateur
get - 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.)