--- title: Setter slug: Web/JavaScript/Reference/Functions/set tags: - ECMAScript 5 - Functions - JavaScript translation_of: Web/JavaScript/Reference/Functions/set ---
Die set Syntax bindet eine Objekteigenschaft an eine Funktion welche aufgerufen wird, wenn die Eigenschaft neu beschrieben wird.
{set prop(val) { . . . }}
{set [expression](val) { . . . }}
propvalprop zugewiesen wird.In JavaScript kann ein Setter benutzt werden, um eine Funktion aufzurufen, wenn eine Eigenschaft geändert werden soll. Setter werden oft in Verbindung mit Gettern als Pseudoeigenschaft benutzt. Es ist nicht möglich gleichzeitig einen Setter auf einer Eigenschaft zu haben, die eine tatsächlichen Wert hält.
Das folgende ist zu beachten, wenn mit der set Syntax gearbeitet wird:
set oder einen Dateneintrag mit der gleichen Eigenschaft geben. ({ set x(v) { }, set x(v) { } } und { x: ..., set x(v) { } } sind verboten)Ein Setter kann mit dem delete Operator gelöscht werden.
Das folgende definiert eine Pseudoeigenschaft current im Objekt language, die bei einer Zuweisung einen Wert in das log Array hinzufügt:
var language = {
set current(name) {
this.log.push(name);
},
log: []
}
language.current = 'EN';
console.log(language.log); // ['EN']
language.current = 'FA';
console.log(language.log); // ['EN', 'FA']
Zu beachten ist, dass current nicht definiert ist und der Zugriff auf diese undefined als Ergebnis liefert.
delete OperatorWenn ein Setter gelöscht werden soll, muss man einfach delete benutzen:
delete o.current;
definePropertyUm einen Setter später zu einem existierenden Objekt hinzuzufügen, benutzt man {{jsxref("Object.defineProperty()")}}.
var o = {a: 0};
Object.defineProperty(o, 'b', { set: function(x) { this.a = x / 2; } });
o.b = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
console.log(o.a) // 5
var expr = 'foo';
var obj = {
baz: 'bar',
set [expr](v) { this.baz = v; }
};
console.log(obj.baz); // "bar"
obj.foo = 'baz'; // run the setter
console.log(obj.baz); // "baz"
| Spezifikation | Status | Kommentar |
|---|---|---|
| {{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}} | {{Spec2('ES5.1')}} | Initiale Definition. |
| {{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ES6')}} | Berechnete Eigenschaftsnamen hinzugefügt. |
| {{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.functions.set")}}