Object.prototype.__defineGetter__()

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, könnte sie bereits aus den relevanten Webstandards entfernt worden sein, in Kürze entfernt werden oder nur noch aus Kompatibilitätsgründen bestehen. Vermeiden Sie die Verwendung und aktualisieren Sie vorhandenen Code, falls möglich; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu unterstützen. Beachten Sie, dass diese Funktion jederzeit aufhören könnte zu funktionieren.

Hinweis: Dieses Feature ist zugunsten der Definition von gettern mit der Objekt-Initialisierer-Syntax oder der Object.defineProperty()-API veraltet. Das Verhalten dieser Methode ist nur für die Web-Kompatibilität spezifiziert und muss auf keiner Plattform implementiert werden. Es funktioniert möglicherweise nicht überall.

Die __defineGetter__()-Methode von Object-Instanzen bindet eine Eigenschaft eines Objekts an eine Funktion, die aufgerufen wird, wenn auf diese Eigenschaft zugegriffen wird.

Syntax

js
__defineGetter__(prop, func)

Parameter

prop

Ein String, der den Namen der Eigenschaft enthält, an die der Getter func gebunden ist.

func

Eine Funktion, die an den Zugriff auf die angegebene Eigenschaft gebunden ist.

Rückgabewert

Keiner (undefined).

Ausnahmen

TypeError

Wird ausgelöst, wenn func keine Funktion ist.

Beschreibung

Alle Objekte, die von Object.prototype erben (d. h. alle außer null-Prototype-Objekte), erben die __defineGetter__()-Methode. Diese Methode ermöglicht es, einen Getter an einem bereits existierenden Objekt zu definieren. Dies entspricht Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }), was bedeutet, dass die Eigenschaft aufzählbar und konfigurierbar ist und ein vorhandener Setter, falls vorhanden, erhalten bleibt.

__defineGetter__() ist in der Spezifikation als "normativ optional" definiert, was bedeutet, dass keine Implementierung verpflichtet ist, dies zu implementieren. Allerdings wird es von allen großen Browsern implementiert und aufgrund der fortgesetzten Nutzung ist es unwahrscheinlich, dass es entfernt wird. Wenn ein Browser __defineGetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __lookupSetter__() und __defineSetter__() implementieren.

Beispiele

Verwendung von __defineGetter__()

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

Definition einer Getter-Eigenschaft auf standardmäßige Weise

Sie können die get-Syntax verwenden, um einen Getter zu definieren, wenn das Objekt zuerst initialisiert wird.

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

Sie können auch Object.defineProperty() verwenden, um einen Getter an einem Objekt zu definieren, nachdem es erstellt wurde. Im Vergleich zu __defineGetter__() ermöglicht diese Methode Ihnen, die Aufzählbarkeit und Konfigurierbarkeit des Getters zu steuern sowie Symbol-Eigenschaften zu definieren. Die Object.defineProperty()-Methode funktioniert auch mit null-Prototype-Objekten, die nicht von Object.prototype erben und daher nicht die __defineGetter__()-Methode haben.

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

Spezifikationen

Specification
ECMAScript Language Specification
# sec-object.prototype.__defineGetter__

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch