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 gilt zugunsten der API Object.getOwnPropertyDescriptor() als veraltet. Das Verhalten dieser Methode ist nur aus Gründen der Webkompatibilität spezifiziert; keine Plattform ist verpflichtet, sie zu implementieren. Sie funktioniert möglicherweise nicht überall.

Die Methode __lookupGetter__() 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 mit dem Namen der Eigenschaft, deren Getter zurückgegeben werden soll.

Rückgabewert

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

Beschreibung

Alle Objekte, die von Object.prototype erben (also alle außer Objekten mit null als Prototyp), erben die Methode __lookupGetter__(). Wenn für eine Eigenschaft eines Objekts ein Getter definiert wurde, kann über diese Eigenschaft nicht auf die Getter-Funktion zugegriffen werden, da die Eigenschaft auf den Rückgabewert dieser Funktion verweist. Mit __lookupGetter__() lässt sich eine Referenz auf die Getter-Funktion abrufen.

__lookupGetter__() durchsucht die Prototypkette nach der angegebenen Eigenschaft. Wenn ein Objekt in der Prototypkette die angegebene eigene Eigenschaft besitzt, wird das Attribut get des Eigenschaftsdeskriptors dieser Eigenschaft zurückgegeben. Ist die Eigenschaft eine Dateneigenschaft, wird undefined zurückgegeben. Wird die Eigenschaft in der gesamten Prototypkette nicht gefunden, wird ebenfalls undefined zurückgegeben.

__lookupGetter__() ist in der Spezifikation als „normative optional“ definiert. Das bedeutet, dass keine Implementierung verpflichtet ist, diese Methode bereitzustellen. Allerdings wird sie von allen wichtigen Browsern implementiert, und aufgrund ihrer fortgesetzten Verwendung ist es unwahrscheinlich, dass sie entfernt wird. Wenn ein Browser __lookupGetter__() implementiert, muss er auch die Methoden __lookupSetter__(), __defineGetter__() und __defineSetter__() implementieren.

Beispiele

__lookupGetter__() verwenden

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

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

Den Getter einer Eigenschaft auf die übliche Weise ermitteln

Verwenden Sie die API Object.getOwnPropertyDescriptor(), um den Getter einer Eigenschaft zu ermitteln. Im Gegensatz zu __lookupGetter__() lassen sich damit auch Symbol-Eigenschaften ermitteln. Die Methode Object.getOwnPropertyDescriptor() funktioniert außerdem mit Objekten mit null als Prototyp. Diese erben nicht von Object.prototype und verfügen daher nicht über die Methode __lookupGetter__(). Falls es wichtig ist, wie __lookupGetter__() die Prototypkette durchsucht, können Sie dieses Verhalten mit Object.getPrototypeOf() selbst 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