Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

js
__defineGetter__(prop, func)

Parameter

prop

Ein String mit dem Namen der Eigenschaft, an die der Getter func gebunden wird.

func

Eine Funktion, die beim Zugriff auf die angegebene Eigenschaft aufgerufen wird.

Rückgabewert

Keiner (undefined).

Ausnahmen

TypeError

Wird ausgelöst, wenn func keine 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

js
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.

js
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__().

js
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__

Browser-Kompatibilität

Siehe auch