Método Object.defineProperty()
Prevenir alterações de valores em apenas alguma propriedade de um objeto.
Nota
Esse método define apenas para 1 propriedade.
Sintaxe
Object.defineProperty(
[objeto],
[nome da propriedade],
[objeto de configuração]
)
Opções de configuração do objeto
Opção enumerable
(boolean):
indicar se esta propriedade será exibido na enumeração das propriedades de um objeto (ao utilizar console.log()
ou Object.keys()
, por exemplo).
enumerable: true
function Produto(nome, preco, estoque) {
this.nome = nome;
this.preco = preco;
this.estoque = estoque;
Object.defineProperty(this, "estoque", {
enumerable: true,
value: estoque
})
}
const produto = new Produto("Camiseta", 20, 3);
console.log(produto); // Produto { nome: 'Camiseta', preco: 20, estoque: 3 }
enumerable: false
(Valor padrão)
function Produto(nome, preco, estoque) {
this.nome = nome;
this.preco = preco;
this.estoque = estoque;
Object.defineProperty(this, "estoque", {
enumerable: false,
value: estoque
})
}
const produto = new Produto("Camiseta", 20, 3);
console.log(produto); // Produto { nome: 'Camiseta', preco: 20 }
value
(any):
Indicar o valor da propriedade. O valor padrão é undefined
.
function Produto(nome, preco, estoque) {
this.nome = nome;
this.preco = preco;
this.estoque = estoque;
Object.defineProperty(this, "estoque", {
enumerable: true,
value: estoque,
})
}
const produto = new Produto("Camiseta", 20, 3);
console.log(produto); // Produto { nome: 'Camiseta', preco: 20 }
writable
(boolean):
Indicar se esta propriedade será imutável (writable: false
) ou mutável (writable: true
). O valor padrão é false
.
function Produto(nome, preco, estoque) {
this.nome = nome;
this.preco = preco;
this.estoque = estoque;
Object.defineProperty(this, "estoque", {
enumerable: true,
value: estoque,
writable: false
})
}
const produto = new Produto("Camiseta", 20, 3);
produto.estoque = 100;
console.log(produto); // Produto { nome: 'Camiseta', preco: 20 }
configurable
(boolean):
Indicar se esta propriedade é configurável (permitir deletar ou reconfigurar a propriedade). O valor padrão é false
.
function Produto(nome, preco, estoque) {
this.nome = nome;
this.preco = preco;
this.estoque = estoque;
Object.defineProperty(this, "estoque", {
enumerable: true,
value: estoque,
writable: false,
configurable: false // <--
});
// Erro
Object.defineProperty(this, "estoque", {
enumerable: true,
value: estoque,
writable: false,
configurable: false
});
}
const produto = new Produto("Camiseta", 20, 3);
console.log(produto); // Cannot redefine property: estoque
Exemplo
function Produto(nome, preco, estoque) {
this.nome = nome;
this.preco = preco;
this.estoque = estoque;
Object.defineProperty(this, "estoque", {
enumerable: true,
value: estoque,
writable: false,
configurable: false
});
}
const produto = new Produto("Camiseta", 20, 3);
console.log(produto); // Produto { nome: 'Camiseta', preco: 20, estoque: 3 }