Object.prototype.__lookupGetter__()

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: Diese Funktion ist zugunsten der Object.getOwnPropertyDescriptor() API veraltet. Das Verhalten dieser Methode ist nur zur Web-Kompatibilität spezifiziert und muss nicht auf jeder Plattform implementiert werden. Es kann sein, dass sie nicht überall funktioniert.

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

Syntax

js
__lookupGetter__(prop)

Parameter

prop

Eine Zeichenkette mit dem Namen der Eigenschaft, deren Getter zurückgegeben werden soll.

Rückgabewert

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

Beschreibung

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

__lookupGetter__() durchläuft die Prototypkette, um die angegebene Eigenschaft zu finden. Wenn irgendein Objekt in der Prototypkette die angegebene eigene Eigenschaft hat, wird das get-Attribut des Eigenschaftsbeschreibers für diese Eigenschaft zurückgegeben. Wenn die Eigenschaft eine Dateneigenschaft ist, wird undefined zurückgegeben. Wird die Eigenschaft entlang der gesamten Prototypkette nicht gefunden, wird ebenfalls undefined zurückgegeben.

__lookupGetter__() ist in der Spezifikation als "normativ optional" definiert, was bedeutet, dass keine Implementierung dazu verpflichtet ist, dies zu implementieren. Allerdings implementieren alle großen Browser diese Funktion, und aufgrund ihrer fortgesetzten Nutzung ist es unwahrscheinlich, dass sie 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]

Ein Getter auf die Standardweise nachschlagen

Sie sollten die Object.getOwnPropertyDescriptor()-API verwenden, um einen Getter einer Eigenschaft nachzuschlagen. Im Vergleich zu __lookupGetter__() ermöglicht diese Methode das Nachschlagen von Symbol-Eigenschaften. Die Object.getOwnPropertyDescriptor()-Methode funktioniert auch mit null-Prototyp-Objekten, die nicht von Object.prototype erben und daher die __lookupGetter__()-Methode nicht besitzen. Wenn das Verhalten von __lookupGetter__(), die Prototypkette aufwärts zu durchlaufen, 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

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch