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

View in English Always switch to English

Object.prototype.__defineSetter__()

Deprecated

Avoid using this feature in new projects. TC39 included accessor methods in Annex B of the ECMAScript specification, which covers JavaScript features with "one or more undesirable characteristics and in the absence of legacy usage would be removed." This feature may be a candidate for removal from web standards or browsers.

Hinweis: Diese Funktion ist veraltet. Stattdessen sollten Sie Setter mit der Objektinitialisierer-Syntax oder der API Object.defineProperty() definieren. Das Verhalten dieser Methode ist nur aus Gründen der Webkompatibilität spezifiziert; keine Plattform ist verpflichtet, sie zu implementieren. Sie funktioniert möglicherweise nicht überall.

Die Methode __defineSetter__() von Object-Instanzen verknüpft eine Eigenschaft eines Objekts mit einer Funktion, die aufgerufen wird, wenn versucht wird, dieser Eigenschaft einen Wert zuzuweisen.

Syntax

js
__defineSetter__(prop, func)

Parameter

prop

Ein String mit dem Namen der Eigenschaft, an die der Setter func gebunden wird.

func

Eine Funktion, die aufgerufen wird, wenn versucht wird, der angegebenen Eigenschaft einen Wert zuzuweisen. Diese Funktion erhält den folgenden Parameter:

val

Der Wert, der prop zugewiesen werden soll.

Rückgabewert

Keiner (undefined).

Ausnahmen

TypeError

Wird ausgelöst, wenn func keine Funktion ist.

Beschreibung

Alle Objekte, die von Object.prototype erben (also alle außer Objekten mit null-Prototyp), erben die Methode __defineSetter__(). Mit dieser Methode lässt sich ein Setter für ein bereits vorhandenes Objekt definieren. Dies entspricht Object.defineProperty(obj, prop, { set: func, configurable: true, enumerable: true }). Die Eigenschaft ist damit aufzählbar und konfigurierbar; ein gegebenenfalls vorhandener Getter bleibt erhalten.

__defineSetter__() ist in der Spezifikation als „normativ optional“ definiert. Das bedeutet, dass Implementierungen diese Methode nicht bereitstellen müssen. Alle wichtigen Browser implementieren sie jedoch, und aufgrund ihrer anhaltenden Verwendung ist es unwahrscheinlich, dass sie entfernt wird. Wenn ein Browser __defineSetter__() implementiert, muss er auch die Methoden __lookupGetter__(), __lookupSetter__() und __defineGetter__() implementieren.

Beispiele

__defineSetter__() verwenden

js
const o = {};
o.__defineSetter__("value", function (val) {
  this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Eine Setter-Eigenschaft auf standardkonforme Weise definieren

Mit der set-Syntax können Sie einen Setter definieren, wenn das Objekt initialisiert wird.

js
const o = {
  set value(val) {
    this.anotherValue = val;
  },
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Sie können auch Object.defineProperty() verwenden, um einen Setter für ein bereits erstelltes Objekt zu definieren. Im Gegensatz zu __defineSetter__() können Sie mit dieser Methode steuern, ob die Setter-Eigenschaft aufzählbar und konfigurierbar ist. Außerdem können Sie damit Symbol-Eigenschaften definieren. Die Methode Object.defineProperty() funktioniert auch mit Objekten mit null-Prototyp, die nicht von Object.prototype erben und daher keine Methode __defineSetter__() besitzen.

js
const o = {};
Object.defineProperty(o, "value", {
  set(val) {
    this.anotherValue = val;
  },
  configurable: true,
  enumerable: true,
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

Spezifikationen

Spezifikation
ECMAScript® 2027 Language Specification
# sec-object.prototype.__defineSetter__

Browser-Kompatibilität

Siehe auch