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.__lookupSetter__()

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

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. Liefert 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 Methode __lookupSetter__(). Wenn ein Setter für eine Eigenschaft eines Objekts definiert wurde, ist es nicht möglich, auf die Setter-Funktion über diese Eigenschaft direkt zuzugreifen, da diese Eigenschaft die Funktion nur aufruft, wenn sie gesetzt wird. __lookupSetter__() kann verwendet werden, um eine Referenz auf die Setter-Funktion zu erhalten.

__lookupSetter__() durchläuft die Prototypen-Kette, um die angegebene Eigenschaft zu finden. Wenn irgendein Objekt entlang der Prototypen-Kette die angegebene eigene Eigenschaft besitzt, wird das set-Attribut des Eigenschaftsbeschreibers für diese Eigenschaft zurückgegeben. Ist diese Eigenschaft eine Dateneigenschaft, wird undefined zurückgegeben. Wird die Eigenschaft entlang der gesamten Prototypen-Kette nicht gefunden, wird ebenfalls undefined zurückgegeben.

__lookupSetter__() ist in der Spezifikation als "normativ optional" definiert, was bedeutet, dass keine Implementierung erforderlich ist. Allerdings implementieren alle großen Browser diese Methode, und aufgrund ihrer weiteren Nutzung ist es unwahrscheinlich, dass sie 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 des Setters einer Eigenschaft auf standardmäßige Weise

Sie sollten die Object.getOwnPropertyDescriptor() API verwenden, um den Setter einer Eigenschaft nachzuschlagen. Im Vergleich zu __lookupSetter__() ermöglicht diese Methode es, Symbol-Eigenschaften nachzuschlagen. Die Object.getOwnPropertyDescriptor()-Methode funktioniert auch mit null-Prototyp-Objekten, die nicht von Object.prototype erben und daher die Methode __lookupSetter__() nicht besitzen. Wenn das Verhalten von __lookupSetter__(), die Prototypen-Kette zu durchlaufen, wichtig ist, können Sie dies 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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-object.prototype.__lookupSetter__

Browser-Kompatibilität

Siehe auch