Object.prototype.__defineSetter__()

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: Diese Funktion ist zugunsten der Definition von Settern mithilfe der Objekt-Initialisierungs-Syntax oder der Object.defineProperty() API veraltet. Das Verhalten dieser Methode ist nur aus Gründen der Web-Kompatibilität spezifiziert und muss auf keiner Plattform implementiert werden. Es kann möglicherweise nicht überall funktionieren.

Die __defineSetter__() Methode von Object Instanzen bindet eine Objekteigenschaft an eine Funktion, die aufgerufen wird, wenn versucht wird, diese Eigenschaft zu setzen.

Syntax

js
__defineSetter__(prop, func)

Parameter

prop

Ein String, der den Namen der Eigenschaft enthält, an die der Setter func gebunden ist.

func

Eine Funktion, die aufgerufen wird, wenn versucht wird, die angegebene Eigenschaft zu setzen. Diese Funktion empfängt den folgenden Parameter:

val

Der Wert, der versucht wird, prop zuzuweisen.

Rückgabewert

Keiner (undefined).

Ausnahmen

TypeError

Wird ausgelöst, wenn func keine Funktion ist.

Beschreibung

Alle Objekte, die von Object.prototype erben (das heißt alle außer Objekte mit null-Prototyp), erben die __defineSetter__() Methode. Diese Methode ermöglicht es, einen Setter auf einem bereits bestehenden Objekt zu definieren. Dies entspricht Object.defineProperty(obj, prop, { set: func, configurable: true, enumerable: true }), was bedeutet, dass die Eigenschaft aufzählbar und konfigurierbar ist und ein vorhandener Getter, falls vorhanden, erhalten bleibt.

__defineSetter__() ist in der Spezifikation als "normatively optional" definiert, was bedeutet, dass keine Implementierung dazu verpflichtet ist, dies zu implementieren. Allerdings implementieren alle großen Browser es, und aufgrund seiner fortdauernden Nutzung ist es unwahrscheinlich, dass es entfernt wird. Wenn ein Browser __defineSetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __lookupSetter__(), und __defineGetter__() implementieren.

Beispiele

Verwenden von __defineSetter__()

js
const o = {};
o.__defineSetter__("value", function (val) {
  this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Definieren einer Setter-Eigenschaft auf standardmäßige Weise

Sie können die set Syntax verwenden, um einen Setter zu definieren, wenn das Objekt erstmals initialisiert wird.

js
const o = {
  set value(val) {
    this.anotherValue = val;
  },
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Sie können auch Object.defineProperty() verwenden, um einen Setter auf einem Objekt zu definieren, nachdem es erstellt wurde. Im Vergleich zu __defineSetter__() ermöglicht diese Methode die Kontrolle über die Aufzählbarkeit und Konfigurierbarkeit des Setters sowie die Definition von Symbol Eigenschaften. Die Object.defineProperty() Methode funktioniert auch mit Objekten mit null-Prototyp, die nicht von Object.prototype erben und daher die __defineSetter__() Methode nicht haben.

js
const o = {};
Object.defineProperty(o, "value", {
  set(val) {
    this.anotherValue = val;
  },
  configurable: true,
  enumerable: true,
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-object.prototype.__defineSetter__

Browser-Kompatibilität

Siehe auch