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: Diese Funktion ist zugunsten der API Object.getOwnPropertyDescriptor() 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 __lookupSetter__() 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 mit dem Namen der Eigenschaft, 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 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 __lookupSetter__(). Wenn für eine Eigenschaft eines Objekts ein Setter definiert wurde, kann über diese Eigenschaft nicht auf die Setter-Funktion zugegriffen werden, da die Eigenschaft die Funktion nur aufruft, wenn ihr ein Wert zugewiesen wird. Mit __lookupSetter__() lässt sich eine Referenz auf die Setter-Funktion abrufen.

__lookupSetter__() durchsucht die Prototypkette nach der angegebenen Eigenschaft. Wenn ein Objekt in der Prototypkette die angegebene eigene Eigenschaft besitzt, wird das Attribut set des Eigenschaftsdeskriptors dieser Eigenschaft zurückgegeben. Handelt es sich um eine Dateneigenschaft, wird undefined zurückgegeben. Wird die Eigenschaft in der gesamten Prototypkette nicht gefunden, wird ebenfalls undefined zurückgegeben.

__lookupSetter__() ist in der Spezifikation als „normative optional“ definiert. Das bedeutet, dass keine Implementierung diese Methode bereitstellen muss. Allerdings implementieren alle großen Browser sie. Da sie weiterhin verwendet wird, ist es unwahrscheinlich, dass sie entfernt wird. Wenn ein Browser __lookupSetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __defineGetter__() und __defineSetter__() implementieren.

Beispiele

__lookupSetter__() verwenden

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

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

Den Setter einer Eigenschaft auf die übliche Weise ermitteln

Verwenden Sie die API Object.getOwnPropertyDescriptor(), um den Setter einer Eigenschaft zu ermitteln. Im Gegensatz zu __lookupSetter__() können Sie damit auch Eigenschaften mit einem Symbol als Schlüssel ermitteln. Die Methode Object.getOwnPropertyDescriptor() funktioniert außerdem mit Objekten mit null als Prototyp. Diese erben nicht von Object.prototype und besitzen daher keine Methode __lookupSetter__(). Falls es wichtig ist, wie bei __lookupSetter__() die Prototypkette zu durchsuchen, können Sie dieses Verhalten 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

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

Browser-Kompatibilität

Siehe auch