Object.prototype.__lookupSetter__()

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

Die __lookupSetter__()-Methode von Object-Instanzen gibt die Funktion zurück, die als Setter für 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 für die angegebene Eigenschaft gebunden ist. Gibt undefined zurück, falls eine solche Eigenschaft nicht gefunden wird oder die Eigenschaft eine Dateneigenschaft ist.

Beschreibung

Alle Objekte, die von Object.prototype erben (das sind alle außer null-Prototyp-Objekte), erben die Methode __lookupSetter__(). Wenn ein Setter für eine Eigenschaft eines Objekts definiert wurde, ist es nicht möglich, durch diese Eigenschaft auf die Setter-Funktion zu verweisen, da diese Eigenschaft die Funktion nur aufruft, wenn sie gesetzt wird. __lookupSetter__() kann verwendet werden, um einen Verweis auf die Setter-Funktion zu erhalten.

__lookupSetter__() durchläuft die Prototypkette, um die angegebene Eigenschaft zu finden. Wenn ein Objekt in der Prototypkette 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 in der gesamten Prototypkette nicht gefunden wird, wird ebenfalls undefined zurückgegeben.

__lookupSetter__() ist in der Spezifikation als "normativ optional" definiert, was bedeutet, dass keine Implementierung erforderlich ist, dies umzusetzen. Nichtsdestotrotz implementieren alle großen Browser es, 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]

Nachschlagen eines Eigenschafts-Setters 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 Object.getOwnPropertyDescriptor()-Methode funktioniert auch mit null-Prototyp-Objekten, die nicht von Object.prototype erben und daher die __lookupSetter__()-Methode nicht besitzen. Wenn das Verhalten von __lookupSetter__(), die Prototypkette durchzulaufen, wichtig ist, können Sie es selbst mit Object.getPrototypeOf() 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® 2025 Language Specification
# sec-object.prototype.__lookupSetter__

Browser-Kompatibilität

Siehe auch