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-Initialisierer-Syntax oder der Object.defineProperty()
API veraltet. Das Verhalten dieser Methode ist nur zur Web-Kompatibilität spezifiziert und muss in keiner Plattform implementiert werden. Sie funktioniert möglicherweise nicht überall.
Die __defineSetter__()
-Methode von Object
-Instanzen bindet die Eigenschaft eines Objekts an eine Funktion, die aufgerufen wird, wenn versucht wird, diese Eigenschaft zu setzen.
Syntax
__defineSetter__(prop, func)
Parameter
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 vorhandenen 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 "normativ optional" definiert, was bedeutet, dass keine Implementierung dies implementieren muss. Allerdings implementieren alle großen Browser es, und aufgrund seiner fortgesetzten Verwendung ist es unwahrscheinlich, dass es entfernt wird. Wenn ein Browser __defineSetter__()
implementiert, muss er auch die __lookupGetter__()
, __lookupSetter__()
, und __defineGetter__()
-Methoden implementieren.
Beispiele
Verwendung von __defineSetter__()
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 zuerst initialisiert wird.
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 für ein Objekt zu definieren, nachdem es erstellt wurde. Im Vergleich zu __defineSetter__()
ermöglicht diese Methode, die Aufzählbarkeit und Konfigurierbarkeit des Setzers zu kontrollieren, sowie [Symbol]-Eigenschaften zu definieren (/de/docs/Web/JavaScript/Reference/Global_Objects/Symbol). Die Object.defineProperty()
-Methode funktioniert auch mit Objekten mit Null-Prototypen, die nicht von Object.prototype
erben und daher nicht die __defineSetter__()
-Methode haben.
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__ |