TypeError: setting getter-only property "x"(установка свойства только для геттера "x")
Сообщения
TypeError: назначение свойств только для чтения не допускается в строгом режиме (Edge) TypeError: установка свойства только для геттера "x" (Firefox) TypeError: не удаётся установить свойство "prop" из #<Object>, который имеет только геттер (Chrome)
Тип ошибки
TypeError только в строгом режиме.
Что пошло не так?
Предпринята попытка задать новое значение свойству, для которого указан только геттер. . Пока это молча будет проигнорировано в non-strict режиме, оно бросит TypeError в strict mode.
Примеры
В приведённом ниже примере показано, как установить getter для свойства. Он не задаёт сеттер, так TypeError выдаётся при попытке установить свойство температуры до 30. Дополнительные сведения см. Также в Object.defineProperty() странице.
js
"use strict";
function Archiver() {
  var temperature = null;
  Object.defineProperty(this, "temperature", {
    get: function () {
      console.log("get!");
      return temperature;
    },
  });
}
var arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 30;
// TypeError: setting getter-only property "temperature"
Чтобы устранить эту ошибку, необходимо либо удалить строку 16, в которой предпринята попытка задать свойство temperature, либо реализовать для неё сеттер, например, как показано ниже:
js
"use strict";
function Archiver() {
  var temperature = null;
  var archive = [];
  Object.defineProperty(this, "temperature", {
    get: function () {
      console.log("get!");
      return temperature;
    },
    set: function (value) {
      temperature = value;
      archive.push({ val: temperature });
    },
  });
  this.getArchive = function () {
    return archive;
  };
}
var arc = new Archiver();
arc.temperature; // 'get!'
arc.temperature = 11;
arc.temperature = 13;
arc.getArchive(); // [{ val: 11 }, { val: 13 }]