Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.

View in English Always switch to English

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

js
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().

js
"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:

js
"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 }] 

Veja também