TypeError: setting getter-only property "x"
A exceção apenas do modo strict do Javascript "setting getter-only property" ocorre quando é feita a tentativa de definir um novo valor para uma propriedade para qual apenas um getter está especificado.
Mensagem
TypeError: Assignment to read-only properties is not allowed in strict mode (Edge)
TypeError: setting getter-only property "x" (Firefox)
TypeError: Cannot set property "prop" of #<Object> which has only a getter (Chrome)
Tipo de Erro
TypeError
no modo strict apenas.
O que deu errado?
Tem uma tentativa de definir um novo valor para uma propriedade para qual apenas um getter está especificado.
Isto será silenciosamente ignorado no modo non-strict, enquanto vai lançar um TypeError
no modo strict.
Exemplos
Propriedades sem setter
O exemplo abaixo mostra como definir um getter para uma propriedade. Isso não especifica um setter, então um
TypeError
vai ser lançado quando for feita a tentativa de definir a propriedade temperatura
para 30
. Para mais detalhes veja também a página Object.defineProperty()
.
"use strict";
function Arquivo() {
var temperatura = null;
Object.defineProperty(this, "temperatura", {
get: function () {
console.log("get!");
return temperatura;
},
});
}
var arq = new Arquivo();
arq.temperatura; // 'get!'
arq.temperatura = 30;
// TypeError: setting getter-only property "temperatura"
Para corrigir este erro, você vai ter que remover a linha 16, onde é feita a tentativa de definir a propriedade temperatura, ou você vai precisar implementar um setter para a propriedade, desta forma, por exemplo:
"use strict";
function Arquivo() {
var temperatura = null;
var arquivo = [];
Object.defineProperty(this, "temperatura", {
get: function () {
console.log("get!");
return temperatura;
},
set: function (value) {
temperatura = value;
arquivo.push({ val: temperatura });
},
});
this.getArquivo = function () {
return arquivo;
};
}
var arq = new Arquivo();
arq.temperatura; // 'get!'
arq.temperatura = 11;
arq.temperatura = 13;
arq.getArquivo(); // [{ val: 11 }, { val: 13 }]