HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
View in English Always switch to English
Die in strict mode vorkommende JavaScript-Ausnahme "setting getter-only property" tritt auf, wenn versucht wird, einem Eigenschaftswert einen neuen Wert zuzuweisen, für den nur ein getter definiert ist, oder wenn eine private accessor-Eigenschaft gesetzt wird, die ebenfalls nur einen Getter hat.
TypeError: Cannot set property x of #<Object> which has only a getter (V8-based) TypeError: '#x' was defined without a setter (V8-based) TypeError: setting getter-only property "x" (Firefox) TypeError: Attempted to assign to readonly property. (Safari) TypeError: Trying to access an undefined private setter (Safari)
TypeError in strict mode nur.
TypeError
Es wird versucht, einer Eigenschaft, für die nur ein getter definiert ist, einen neuen Wert zuzuweisen. Während dies im nicht-strengen Modus stillschweigend ignoriert wird, löst es im strict mode einen TypeError aus. Klassen sind immer im strengen Modus, daher löst die Zuweisung zu einem rein lesenden privaten Element immer diesen Fehler aus.
Das folgende Beispiel zeigt, wie ein Getter für eine Eigenschaft gesetzt wird. Es wird kein setter definiert, daher wird ein TypeError ausgelöst, wenn versucht wird, die temperature-Eigenschaft auf 30 zu setzen. Für weitere Details siehe auch die Seite Object.defineProperty().
temperature
30
Object.defineProperty()
"use strict"; function Archiver() { const temperature = null; Object.defineProperty(this, "temperature", { get() { console.log("get!"); return temperature; }, }); } const arc = new Archiver(); arc.temperature; // 'get!' arc.temperature = 30; // TypeError: setting getter-only property "temperature"
Um diesen Fehler zu beheben, müssen Sie entweder die Zeile arc.temperature = 30, die versucht, die temperature-Eigenschaft zu setzen, entfernen oder einen setter dafür implementieren, zum Beispiel so:
arc.temperature = 30
"use strict"; function Archiver() { let temperature = null; const archive = []; Object.defineProperty(this, "temperature", { get() { console.log("get!"); return temperature; }, set(value) { temperature = value; archive.push({ val: temperature }); }, }); this.getArchive = function () { return archive; }; } const arc = new Archiver(); arc.temperature; // 'get!' arc.temperature = 11; arc.temperature = 13; arc.getArchive(); // [{ val: 11 }, { val: 13 }]
Object.defineProperties()