Object.prototype.__lookupSetter__()

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, kann sie bereits aus den relevanten Webstandards entfernt worden sein, befindet sich im Prozess der Entfernung oder wird nur aus Kompatibilitätsgründen beibehalten. Vermeiden Sie die Verwendung und aktualisieren Sie gegebenenfalls bestehenden Code; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu treffen. Beachten Sie, dass diese Funktion jederzeit nicht mehr funktionieren kann.

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 allen Plattformen implementiert werden. Möglicherweise funktioniert sie nicht überall.

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

Syntax

js
__lookupSetter__(prop)

Parameter

prop

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

Rückgabewert

Die Funktion, die als Setter an 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 (das heißt alle außer null-Prototyp Objekte), erben die __lookupSetter__() Methode. Wenn ein Setter für eine Eigenschaft eines Objekts definiert wurde, ist es nicht möglich, die Setter-Funktion durch diese Eigenschaft zu referenzieren, da diese Eigenschaft die Funktion nur beim Setzen aufruft. __lookupSetter__() kann verwendet werden, um eine Referenz auf die Setter-Funktion zu erhalten.

__lookupSetter__() durchläuft die Prototyp-Kette, um die angegebene Eigenschaft zu finden. Wenn ein Objekt entlang der Prototyp-Kette die angegebene eigene Eigenschaft hat, wird das set Attribut des Eigenschaftsdeskriptors 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.

__lookupSetter__() 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 seiner fortgesetzten Nutzung ist es unwahrscheinlich, dass es entfernt wird. Wenn ein Browser __lookupSetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __defineGetter__() und __defineSetter__() implementieren.

Beispiele

Verwendung von __lookupSetter__()

js
const obj = {
  set foo(value) {
    this.bar = value;
  },
};

obj.__lookupSetter__("foo");
// [Function: set foo]

Das Auffinden eines Setters einer Eigenschaft auf die Standardweise

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

js
const obj = {
  set foo(value) {
    this.bar = value;
  },
};

Object.getOwnPropertyDescriptor(obj, "foo").set;
// [Function: set foo]
js
const obj2 = {
  __proto__: {
    set foo(value) {
      this.bar = value;
    },
  },
};

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

console.log(findSetter(obj2, "foo")); // [Function: set foo]

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch