Métodos de Objetos do JavaScript ES5

O ECMAScript 5 (2009) adicionou muitos novos métodos de objetos ao JavaScript.

Gerenciar objeto

// Criar objeto com objeto existente como protótipo
Object.create()
// Adicionar ou alterar atributos do objeto
Object.defineProperty(object, property, descriptor)
// Adicionar ou alterar atributos do objeto
Object.defineProperties(object, descriptors)
// Acessar atributo
Object.getOwnPropertyDescriptor(object, property)
// Retornar todas as propriedades como array
Object.getOwnPropertyNames(object)
// Acessar o protótipo
Object.getPrototypeOf(object)
// Retornar propriedades enumeráveis como array
Object.keys(object)

Proteger objeto

// Impedir adição de atributos ao objeto
Object.preventExtensions(object)
// Se o atributo pode ser adicionado ao objeto, retorna true
Object.isExtensible(object)
// Impedir alteração de atributos do objeto (não valores)
Object.seal(object)
// Se o objeto estiver selado, retorna true
Object.isSealed(object)
// Impedir qualquer alteração no objeto
Object.freeze(object)
// Se o objeto estiver congelado, retorna true
Object.isFrozen(object)

Alterar valor do atributo

Sintaxe

Object.defineProperty(object, property, {value : value)

instância

Este exemplo altera o valor do atributo:

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// Modificar atributo
Object.defineProperty(person, "language", {value : "NO"});

Experimente Você Mesmo

Alterar metadados

ES5 permite alterar os metadados dos seguintes atributos:

writable : true      // Valor do atributo pode ser alterado
enumerable : true    // Atributo pode ser enumerado
configurable : true  // Atributo pode ser reconfigurado
writable : false     // Valor do atributo não pode ser alterado
enumerable : false   // Atributo não enumerável
configurable : false // O atributo não pode ser reconfigurado

ES5 permite alterar getter e setter:

// Definir getter
get: function() { return language }
// Definir setter
set: function(value) { language = value }

Este exemplo define "language" como apenas leitura:

Object.defineProperty(person, "language", {writable:false});

Este exemplo faz com que "language" seja não enumerável:

Object.defineProperty(person, "language", {enumerable:false});

Listar todas as propriedades

Este exemplo lista todas as propriedades de um objeto:

instância

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.getOwnPropertyNames(person);  // Retornar um array de arrays

Experimente Você Mesmo

Listar atributos enumeráveis

Este exemplo lista apenas os atributos enumeráveis do objeto:

instância

const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
Object.defineProperty(person, "language", {enumerable:false});
Object.keys(person);  // Retornar um array de atributos enumeráveis

Experimente Você Mesmo

Adicionar atributo

Este exemplo adiciona novas propriedades ao objeto:

instância

// Criar objeto
const person = {
  firstName: "Bill",
  lastName : "Gates",
  language : "EN"
};
// Adicionar atributo
Object.defineProperty(person, "year", {value:"2008"});

Experimente Você Mesmo

Adicionar Getter e Setter

Object.defineProperty() O método também pode ser usado para adicionar Getter e Setter:

instância

// Criar objeto
const person = {firstName:"Bill", lastName:"Gates"};
// Definir getter
Object.defineProperty(person, "fullName", {
  get: function () {return this.firstName + " " + this.lastName;}
});

Experimente Você Mesmo

uma instância de contador

// Definir objeto
const obj = {counter:0};
// Definir setter
Object.defineProperty(obj, "reset", {
  get : function () {this.counter = 0;}
});
Object.defineProperty(obj, "increment", {
  get : function () {this.counter++;}
});
Object.defineProperty(obj, "decrement", {
  get : function () {this.counter--;}
});
Object.defineProperty(obj, "add", {
  set : function (value) {this.counter += value;}
});
Object.defineProperty(obj, "subtract", {
  set : function (i) {this.counter -= i;}
});
// Operação do Contador:
obj.reset;
obj.add = 5;
obj.subtract = 1;
obj.increment;
obj.decrement;

Experimente Você Mesmo