--- 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) { . . . }}
prop
val
prop
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;
defineProperty
Um 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")}}