TypeError: setting getter-only property "x"
JavaScript ã®å³æ ¼ã¢ã¼ãå°ç¨ã®ä¾å¤ "setting getter-only property" ã¯ãã²ãã¿ã¼ã®ã¿ãå®ç¾©ããã¦ããããããã£ã«æ°ããå¤ãè¨å®ãããã¨ããã¨ããã¾ãã¯åæ§ã«ã²ãã¿ã¼ã®ã¿ãå®ç¾©ããã¦ãããã©ã¤ãã¼ãã¢ã¯ã»ãµã¼ããããã£ã«è¨å®ãããã¨ããã¨ãã«çºçãã¾ãã
ã¨ã©ã¼ã¡ãã»ã¼ã¸
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ã
ã¨ã©ã¼ã®åå
ã²ãã¿ã¼ã®ã¿ãå®ç¾©ããã¦ããããããã£ã«ãæ°ããå¤ãè¨å®ãããã¨ãã¦ãã¾ãã峿 ¼ã¢ã¼ã以å¤ã§ã¯æé»è£¡ã«ç¡è¦ãããã ãã§ããã 峿 ¼ã¢ã¼ãã§ã¯ TypeError ãçºçãã¾ããã¯ã©ã¹ã¯å¸¸ã«å³æ ¼ã¢ã¼ãã§åä½ãããããã²ãã¿ã¼ã®ã¿ãæã¤ãã©ã¤ãã¼ãè¦ç´ ã«å¤ã代å
¥ãããã¨ããã¨ã常ã«ãã®ã¨ã©ã¼ãçºçãã¾ãã
ä¾
>ã»ãã¿ã¼ã®ãªãããããã£
ä¸è¨ã®ä¾ã§ã¯ãããããã£ã®ã²ãã¿ã¼ã®è¨å®æ¹æ³ã示ãã¦ãã¾ããã»ãã¿ã¼ãæå®ãã¦ããªãããã temperature ããããã£ã« 30 ãè¨å®ãããã¨ããã¨ãTypeError ãçºçãã¾ãã詳細㯠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"
ãã®ã¨ã©ã¼ãä¿®æ£ããã«ã¯ã temperature ããããã£ã«å¤ãè¨å®ãããã¨ãã¦ãã 16 è¡ç®ãåãé¤ãããæ¬¡ã®ããã«ã»ãã¿ã¼ãå®è£ ãã¾ãã
"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 }]