Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

set

Baseline Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.

Die set-Syntax bindet eine Eigenschaft eines Objekts 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

js
{ set prop(val) { /* … */ } }
{ set [expression](val) { /* … */ } }

Es gibt einige zusätzliche Einschränkungen bei der Syntax:

  • Ein Setter muss genau einen Parameter haben.

Parameter

prop

Der Name der Eigenschaft, die an die gegebene Funktion gebunden werden soll. Wie bei anderen Eigenschaften in Objektinitialisierern kann es ein String-Literal, 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, um die gegebene Funktion zu binden.

Beschreibung

In JavaScript kann ein Setter verwendet werden, um eine Funktion auszuführen, wann immer versucht wird, den Wert einer Eigenschaft zu ändern. Setzer werden am häufigsten in Verbindung mit Getter verwendet.

Eine Objekteigenschaft ist entweder eine Dateneigenschaft oder eine Zugriffsoroeigenschaft, aber sie kann nicht gleichzeitig beides sein. Lesen Sie Object.defineProperty() für mehr Informationen. Die Setzer-Syntax ermöglicht es Ihnen, die Setzer-Funktion in einem Objektinitialisierer anzugeben.

js
const obj = {
  set prop(val) {
    // setter, the code executed when setting obj.prop
  },
};

Eigenschaften, die mit dieser Syntax definiert werden, sind eigene Eigenschaften des erstellten Objekts und sind konfigurierbar und aufzählbar.

Beispiele

Definieren eines Setzers 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:

js
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, undefined ergibt.

Verwendung von Setzern in Klassen

Sie können dieselbe Syntax verwenden, um öffentliche InstanzSetzer zu definieren, die auf Klasseninstanzen verfügbar sind. In Klassen benötigen Sie kein Komma als Trennzeichen zwischen den Methoden.

js
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 werden in der prototype-Eigenschaft der Klasse definiert und sind somit von allen Instanzen der Klasse gemeinsam genutzt. Im Gegensatz zu Setzer-Eigenschaften in Objektliteralen sind Setzer-Eigenschaften in Klassen nicht aufzählbar.

Statische Setzer und private Setzer verwenden ähnliche Syntaxen, die auf den Seiten zu static und privaten Elementen beschrieben werden.

Entfernen eines Setzers mit dem delete-Operator

Wenn Sie den Setzer entfernen möchten, können Sie delete verwenden:

js
delete language.current;

Definieren eines Setzers für vorhandene Objekte mit defineProperty

Um einem vorhandenen Objekt einen Setzer hinzuzufügen, verwenden Sie Object.defineProperty().

js
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

js
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

Spezifikation
ECMAScript® 2027 Language Specification
# sec-method-definitions

Browser-Kompatibilität

Siehe auch