Baseline Widely available
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.
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:
prop
Der Name der Eigenschaft, die an die gegebene Funktion gebunden werden soll. Wie bei anderen Eigenschaften in Objektinitialisierungen kann es sich um ein String-Literal, ein Zahlenliteral oder einen Bezeichner handeln.
val
Ein Alias für die Variable, die den Wert hält, der prop
zugewiesen werden soll.
expression
Sie können auch Ausdrücke für einen berechneten Eigenschaftsnamen verwenden, um diesen an die gegebene Funktion zu binden.
In JavaScript kann ein Setter verwendet werden, um eine Funktion auszuführen, wenn 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, sie kann aber nicht gleichzeitig beides sein. Lesen Sie Object.defineProperty()
für mehr Informationen. Die Setzer-Syntax erlaubt es Ihnen, die Setzerfunktion in einer Objektinitialisierung anzugeben.
const obj = {
set prop() {
// setter, the code executed when setting obj.prop
},
}
Eigenschaften, die mit dieser Syntax definiert sind, sind Eigenobjekteigenschaften des erstellten Objekts, und sie sind konfigurierbar und aufzählbar.
Beispiele Definieren eines Setzers auf neuen Objekten in ObjektinitialisierungenDas 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 jeder Versuch, darauf zuzugreifen, zu undefined
führt.
Sie können die exakt gleiche Syntax verwenden, um öffentliche Instanz-Setzer zu definieren, die auf Klasseninstanzen verfügbar sind. In Klassen ist kein Komma-Trenner zwischen Methoden erforderlich.
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"
Setter-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 sind.
delete
-Operator
Wenn Sie den Setter entfernen möchten, können Sie ihn einfach löschen
;
defineProperty
Um einen Setter zu einem bestehenden Objekt 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
Verwenden eines berechneten Eigenschaftsnamen
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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4