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.__lookupGetter__()

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: Diese Funktion ist zugunsten der Object.getOwnPropertyDescriptor() API veraltet. Das Verhalten dieser Methode ist nur für die Web-Kompatibilität spezifiziert und muss nicht auf jeder Plattform implementiert werden. Es funktioniert möglicherweise nicht überall.

Die __lookupGetter__() Methode von Object Instanzen gibt die Funktion zurück, die als Getter an die angegebene Eigenschaft gebunden ist.

Syntax

js
__lookupGetter__(prop)

Parameter

prop

Ein String, der den Namen der Eigenschaft enthält, deren Getter zurückgegeben werden soll.

Rückgabewert

Die Funktion, die als Getter an die angegebene Eigenschaft gebunden ist. Gibt undefined zurück, wenn eine solche Eigenschaft nicht gefunden wird oder die Eigenschaft eine Dateneigenschaft ist.

Beschreibung

Alle Objekte, die von Object.prototype erben (also alle außer null-Prototyp Objekte), erben die Methode __lookupGetter__(). Wenn ein Getter für eine Eigenschaft eines Objekts definiert wurde, ist es nicht möglich, die Getter-Funktion über diese Eigenschaft zu referenzieren, da sich diese Eigenschaft auf den Rückgabewert dieser Funktion bezieht. __lookupGetter__() kann verwendet werden, um eine Referenz auf die Getter-Funktion zu erhalten.

__lookupGetter__() läuft die Prototyp-Kette entlang, um die angegebene Eigenschaft zu finden. Wenn ein beliebiges Objekt entlang der Prototyp-Kette die angegebene Eigentumseigenschaft besitzt, wird das get Attribut des Eigenschaftsbeschreibers für diese Eigenschaft zurückgegeben. Wenn diese Eigenschaft eine Dateneigenschaft ist, wird undefined zurückgegeben. Wenn die Eigenschaft entlang der gesamten Prototyp-Kette nicht gefunden wird, wird ebenfalls undefined zurückgegeben.

__lookupGetter__() ist in der Spezifikation als "normativ optional" definiert, was bedeutet, dass keine Implementierung erforderlich ist, um dies zu implementieren. Alle großen Browser implementieren es jedoch, und aufgrund seines fortgesetzten Gebrauchs ist es unwahrscheinlich, dass es entfernt wird. Wenn ein Browser __lookupGetter__() implementiert, muss er auch die Methoden __lookupSetter__(), __defineGetter__() und __defineSetter__() implementieren.

Beispiele

Verwendung von __lookupGetter__()

js
const obj = {
  get foo() {
    return Math.random() > 0.5 ? "foo" : "bar";
  },
};

obj.__lookupGetter__("foo");
// [Function: get foo]

Auf normale Weise nach einem Getter einer Eigenschaft suchen

Sie sollten die Object.getOwnPropertyDescriptor() API verwenden, um den Getter einer Eigenschaft abzufragen. Im Vergleich zu __lookupGetter__() ermöglicht diese Methode das Abfragen von Symbol Eigenschaften. Die Methode Object.getOwnPropertyDescriptor() funktioniert auch mit null-Prototyp Objekten, die nicht von Object.prototype erben und daher die Methode __lookupGetter__() nicht haben. Wenn das Verhalten von __lookupGetter__() beim Durchlaufen der Prototyp-Kette wichtig ist, können Sie es selbst mit Object.getPrototypeOf() implementieren.

js
const obj = {
  get foo() {
    return Math.random() > 0.5 ? "foo" : "bar";
  },
};

Object.getOwnPropertyDescriptor(obj, "foo").get;
// [Function: get foo]
js
const obj2 = {
  __proto__: {
    get foo() {
      return Math.random() > 0.5 ? "foo" : "bar";
    },
  },
};

function findGetter(obj, prop) {
  while (obj) {
    const desc = Object.getOwnPropertyDescriptor(obj, prop);
    if (desc) {
      return desc.get;
    }
    obj = Object.getPrototypeOf(obj);
  }
}

console.log(findGetter(obj2, "foo")); // [Function: get foo]

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-object.prototype.__lookupGetter__

Browser-Kompatibilität

Siehe auch