Object.prototype.__defineGetter__()
Deprecated
Avoid using this feature in new projects. 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." This feature may be a candidate for removal from web standards or browsers.>
Hinweis:
Dieses Feature ist veraltet. Stattdessen sollten Sie Getter mit der Object-Initializer-Syntax oder der API Object.defineProperty() definieren. Das Verhalten dieser Methode ist nur aus Gründen der Webkompatibilität spezifiziert; ihre Implementierung ist auf keiner Plattform vorgeschrieben. Sie funktioniert möglicherweise nicht überall.
Die Methode __defineGetter__() von Object-Instanzen bindet eine Eigenschaft eines Objekts an eine Funktion, die aufgerufen wird, wenn auf diese Eigenschaft zugegriffen wird.
Syntax
__defineGetter__(prop, func)
Parameter
Rückgabewert
Keiner (undefined).
Ausnahmen
TypeError-
Wird ausgelöst, wenn
funckeine Funktion ist.
Beschreibung
Alle Objekte, die von Object.prototype erben (also alle außer Objekten mit null-Prototyp), erben die Methode __defineGetter__(). Mit dieser Methode lässt sich ein Getter auf einem bereits vorhandenen Objekt definieren. Dies entspricht Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }). Die Eigenschaft ist somit aufzählbar und konfigurierbar; ein gegebenenfalls vorhandener Setter bleibt erhalten.
__defineGetter__() ist in der Spezifikation als „normative optional“ definiert. Das bedeutet, dass keine Implementierung diese Methode bereitstellen muss. Alle großen Browser implementieren sie jedoch, und aufgrund ihrer anhaltenden Verwendung ist es unwahrscheinlich, dass sie entfernt wird. Wenn ein Browser __defineGetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __lookupSetter__() und __defineSetter__() implementieren.
Beispiele
>__defineGetter__() verwenden
const o = {};
o.__defineGetter__("gimmeFive", function () {
return 5;
});
console.log(o.gimmeFive); // 5
Eine Getter-Eigenschaft auf standardisierte Weise definieren
Sie können die get-Syntax verwenden, um einen Getter bei der Initialisierung eines Objekts zu definieren.
const o = {
get gimmeFive() {
return 5;
},
};
console.log(o.gimmeFive); // 5
Sie können auch Object.defineProperty() verwenden, um nach der Erstellung eines Objekts einen Getter darauf zu definieren. Im Vergleich zu __defineGetter__() können Sie mit dieser Methode steuern, ob der Getter aufzählbar und konfigurierbar ist, und außerdem Symbol-Eigenschaften definieren. Die Methode Object.defineProperty() funktioniert auch mit Objekten mit null-Prototyp. Diese erben nicht von Object.prototype und verfügen daher nicht über die Methode __defineGetter__().
const o = {};
Object.defineProperty(o, "gimmeFive", {
get() {
return 5;
},
configurable: true,
enumerable: true,
});
console.log(o.gimmeFive); // 5
Spezifikationen
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__defineGetter__> |