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
__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__()
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.
const obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
};
Object.getOwnPropertyDescriptor(obj, "foo").get;
// [Function: get foo]
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