set
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die set
-Syntax bindet eine Objekt-Eigenschaft an eine Funktion, die aufgerufen wird, wenn versucht wird, diese Eigenschaft zu setzen. Sie kann auch in Klassen verwendet werden.
Probieren Sie es aus
const language = {
set current(name) {
this.log.push(name);
},
log: [],
};
language.current = "EN";
language.current = "FA";
console.log(language.log);
// Expected output: Array ["EN", "FA"]
Syntax
{ set prop(val) { /* … */ } }
{ set [expression](val) { /* … */ } }
Es gibt einige zusätzliche Syntaxeinschränkungen:
- Ein Setter muss genau einen Parameter haben.
Parameter
prop
-
Der Name der Eigenschaft, die an die gegebene Funktion gebunden wird. Wie andere Eigenschaften in Objektinitialisierern kann es ein Zeichenfolgenliteral, ein Zahlenliteral oder ein Bezeichner sein.
val
-
Ein Alias für die Variable, die den Wert enthält, der
prop
zugewiesen werden soll. expression
-
Sie können auch Ausdrücke für einen berechneten Eigenschaftsnamen verwenden, der an die gegebene Funktion gebunden wird.
Beschreibung
In JavaScript kann ein Setter verwendet werden, um eine Funktion auszuführen, wann immer versucht wird, den Wert einer Eigenschaft zu ändern. Setter werden meistens in Verbindung mit Gettern verwendet.
Eine Objekteigenschaft ist entweder eine Dateneigenschaft oder eine Zugriffseigenschaft, aber sie kann nicht beides gleichzeitig sein. Lesen Sie Object.defineProperty()
für weitere Informationen. Die Setter-Syntax ermöglicht es Ihnen, die Setter-Funktion in einem Objektinitialisierer anzugeben.
const obj = {
set prop() {
// setter, the code executed when setting obj.prop
},
}
Eigenschaften, die mit dieser Syntax definiert werden, sind eigene Eigenschaften des erstellten Objekts und sie sind konfigurierbar und aufzählbar.
Beispiele
Definieren eines Setters für neue Objekte in Objektinitialisierern
Das folgende Beispiel definiert eine Pseudo-Eigenschaft current
des Objekts language
. Wenn current
ein Wert zugewiesen wird, wird log
mit diesem Wert aktualisiert:
const 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']
Beachten Sie, dass current
nicht definiert ist und alle Zugriffsversuche darauf undefined
zurückgeben.
Verwendung von Settern in Klassen
Sie können dieselbe Syntax verwenden, um öffentliche Instanz-Setter zu definieren, die auf Klasseninstanzen verfügbar sind. In Klassen benötigen Sie das Komma-Trennzeichen zwischen Methoden nicht.
class ClassWithGetSet {
#msg = "hello world";
get msg() {
return this.#msg;
}
set msg(x) {
this.#msg = `hello ${x}`;
}
}
const instance = new ClassWithGetSet();
console.log(instance.msg); // "hello world"
instance.msg = "cake";
console.log(instance.msg); // "hello cake"
Setzer-Eigenschaften sind auf der prototype
-Eigenschaft der Klasse definiert und werden daher von allen Instanzen der Klasse geteilt. Im Gegensatz zu Setter-Eigenschaften in Objektliteralen sind Setter-Eigenschaften in Klassen nicht aufzählbar.
Statische Setter und private Setter verwenden ähnliche Syntaxen, die auf den Seiten zu static
und privaten Elementen beschrieben werden.
Entfernen eines Setters mit dem delete
Operator
Wenn Sie den Setter entfernen möchten, können Sie ihn einfach löschen
:
delete language.current;
Definieren eines Setters auf bestehenden Objekten mit defineProperty
Um einem bestehenden Objekt einen Setter hinzuzufügen, verwenden Sie Object.defineProperty()
.
const o = { a: 0 };
Object.defineProperty(o, "b", {
set(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
Verwendung eines berechneten Eigenschaftsnamens
const expr = "foo";
const 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
Specification |
---|
ECMAScript® 2026 Language Specification # sec-method-definitions |
Browser-Kompatibilität
Siehe auch
- Arbeiten mit Objekten Leitfaden
- Funktionen
get
Object.defineProperty()
- Objekt-Initialisierer
class
- Eigenschafts-Zugriffe
- Inkompatible ES5-Änderung: Literal-Getter- und Setter-Funktionen müssen nun genau null oder ein Argument haben von Jeff Walden (2010)
- Weitere SpiderMonkey-Änderungen: Antike, esoterische, sehr selten verwendete Syntax zur Erstellung von Gettern und Settern wird entfernt von Jeff Walden (2010)