Die set Syntax bindet eine Objekteigenschaft an eine Funktion welche aufgerufen wird, wenn die Eigenschaft neu beschrieben wird.

Syntax

{set prop(val) { . . . }}
{set [expression](val) { . . . }}

Parameter

prop
Der Name der Eigenschaft, die an die gegebene Funktion gebunden wird.
val
Ein Alias für die Variable, die den Wert enthält, der der Eigenschaft prop zugewiesen wird.
expression
Beginnend mit ECMAScript 2015, kann auch ein Ausdruck für einen berechneten Eigenschaftsnamen genutzt werden, der an die Funktion gebunden wird.

Beschreibung

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:

Ein Setter kann mit dem delete Operator gelöscht werden.

Beispiele

Definieren eines Setters in einem neuen Objekt in der Objektinitialisierung

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.

Löschen eines Setter mit dem delete Operator

Wenn ein Setter gelöscht werden soll, muss man einfach delete benutzen:

delete o.current;

Definieren eines Setters auf einem existierenden Objekts mit defineProperty

Um einen Setter später zu einem existierenden Objekt hinzuzufügen, benutzt man 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

Einsatz eines berechneten Eigenschaftsnamen

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"

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Object Initializer' in dieser Spezifikation.
Standard Initiale Definition.
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Method definitions' in dieser Spezifikation.
Standard Berechnete Eigenschaftsnamen hinzugefügt.
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Method definitions' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid WebviewChrome für AndroidEdge MobileFirefox für AndroidOpera für AndroidiOS SafariSamsung InternetNode.js
Grundlegende UnterstützungChrome Vollständige Unterstützung 1Edge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 2IE Vollständige Unterstützung 9Opera Vollständige Unterstützung 9.5Safari Vollständige Unterstützung 3WebView Android Vollständige Unterstützung 1Chrome Android Vollständige Unterstützung 18Edge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 4Opera Android Vollständige Unterstützung JaSafari iOS Vollständige Unterstützung JaSamsung Internet Android Vollständige Unterstützung Janodejs Vollständige Unterstützung Ja
Computed property namesChrome Vollständige Unterstützung 46Edge Vollständige Unterstützung JaFirefox Vollständige Unterstützung 34IE Keine Unterstützung NeinOpera Vollständige Unterstützung 47Safari Keine Unterstützung NeinWebView Android Vollständige Unterstützung 46Chrome Android Vollständige Unterstützung 46Edge Mobile Vollständige Unterstützung JaFirefox Android Vollständige Unterstützung 34Opera Android Vollständige Unterstützung JaSafari iOS Keine Unterstützung NeinSamsung Internet Android Vollständige Unterstützung 5.0nodejs Vollständige Unterstützung Ja

Legende

Vollständige Unterstützung  
Vollständige Unterstützung
Keine Unterstützung  
Keine Unterstützung

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: schlagi123
Zuletzt aktualisiert von: schlagi123,