Object.prototype.__defineSetter__()
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 veraltet zugunsten der Definition von setters mithilfe der Objekt-Initialisierer-Syntax oder der Object.defineProperty() API. Das Verhalten dieser Methode ist nur für die Web-Kompatibilität spezifiziert und eine Implementierung auf anderen Plattformen ist nicht erforderlich. 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 festzulegen.
Syntax
__defineSetter__(prop, func)
Parameter
Rückgabewert
Keiner (undefined).
Ausnahmen
TypeError-
Wird ausgelöst, wenn
funckeine Funktion ist.
Beschreibung
Alle Objekte, die von Object.prototype erben (das heißt, alle außer null-Prototyp-Objekten), erben die Methode __defineSetter__(). Diese Methode ermöglicht es, einen Setter für ein bereits existierendes 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 dazu verpflichtet ist, dies zu implementieren. Dennoch wird es von allen großen Browsern implementiert, und aufgrund seiner fortgesetzten Nutzung ist es unwahrscheinlich, dass es entfernt wird. Wenn ein Browser __defineSetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __lookupSetter__() und __defineGetter__() 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 Standard-Weise
Sie können die set Syntax verwenden, um einen Setter zu definieren, wenn das Objekt erstmals 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 auf einem Objekt zu definieren, nachdem es erstellt wurde. Im Vergleich zu __defineSetter__() ermöglicht Ihnen diese Methode, die Aufzählbarkeit und Konfigurierbarkeit des Setters sowie das Definieren von Symbol-Eigenschaften zu steuern. Die Object.defineProperty()-Methode funktioniert auch mit null-Prototyp-Objekten, die nicht von Object.prototype erben und daher die Methode __defineSetter__() nicht 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
| Spezifikation |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__defineSetter__> |