JS-0409 - JavaScript Completo ES6 - Object

Conhecendo para controlar!
O Objecté o construtor de objetos em JS, permitindo a estes a herança de propriedades e métodos do seu prototype. A criação de objetos se dá através de um wrapper (função destinada a chamar uma ou mais funções) de objeto para o valor fornecido. Se o valor for null ou undefined, o retorno criará um objeto vazio, caso contrário, retornará um objeto de um tipo que corresponda ao valor passado. Se o valor já for um objeto, ele retornará o valor.
Quando o objeto é chamado sem o new Object(), o comportamento é idêntico ao construtor. Ex:
Agora, vamos conhecer alguns métodos de Object:
- create(obj, defineProperties): método que retorna um novo objeto a partir de um existente, utilizando-o como protótipo e permitindo o acréscimo de propriedades (opcional). Ex:
- assign(alvo, obj1, obj2): método que copia os valores de todas as propriedades próprias enumeráveis de um ou mais objetos para um objeto alvo, retornando o objeto alvo modificado. Ex:
- defineProperties(alvo, propriedades): método que adiciona ao alvo novas propriedades permitindo a definição destas novas propriedades ou modificação da definiçãode uma existente, retornando o objeto. As definições de propriedades são as seguintes:
configurable: se definido como true permite ser alterado e deletado do objeto. O valor padrão é false;
enumerable: se true e somente se esta propriedade aparece durante enumeração das propriedades no objeto, define se ela deve ser exibida em uma repetição. O valor padrão é false;
value: valor associado com a propriedade, podendo ser qualquer valor válido em JS (número, objeto, função etc). O valor padrão é undefined;
writable: se true, permite a modificação do valor da propriedade através de um operador de atribuição. O valor padrão é false;
get: função que funciona como um getter da propriedade, ou undefined se não houver getter. Quando a propriedade é acessada, esta função é chamada sem argumentos. Com o this, define para o objeto no qual a propriedade é acessada. O valor retornado será usado como valor da propriedade. O valor padrão é undefined; e
set: função que funciona como um setter para a propriedade, ou undefined se não houver setter. Quando a propriedade é atribuída, esta função é chamada com um argumento. Com o this, configura o objeto através do qual a propriedade é atribuída. O valor padrão é undefined.
- getOwnPropertyDescriptors(obj): lista todos os métodos e propriedades de um objeto, com as suas devidas configurações;
- getOwnPropertyDescriptors(Array): lista com métodos e propriedades e Array;
- getOwnPropertyDescriptors(Array.prototype):lista com métodos e propriedades do protótipo de Array; e
- getOwnPropertyDescriptor(window, 'innerHeight'):puxa de uma única propriedade.
- keys(obj), values(obj) e entries(obj): keys(obj) retorna uma array com as chaves de todas as propriedades diretas e enumeráveis do objeto, .values(obj) retorna uma array com os valores do objeto e entries(obj) retorna uma array com array's contendo a chave e o valor. Ex:
- getOwnPropertyNames(obj): retorna uma array com todas as propriedades diretas do objeto (não retorna as do protótipo);
- getPrototypeOf(): retorna o protótipo do objeto; e
- is(obj1, obj2): verifica se os objetos são iguais e retorna true ou false.
- freeze(): impede qualquer mudança nas propriedades;
- seal(): previne a adição de novas propriedades e impede que as atuais sejam deletadas; e
- preventExtensions(): previne a adição de novas propriedades.
Como repetido diversas vezes, tudo em JS é objeto, sendo assim, por herança, as propriedades seguintes estão disponíveis em todos os objetos criados a partir de funções construtoras:
- constructor: retorna a função construtora do objeto;
- hasOwnProperty('prop'): verifica se possui a propriedade e retorna true;
- propertyIsEnumerable(): verifica se a propriedade é enumerável;
- isPrototypeOf(obj): verifica se o prototype de um objeto é o protótipo do objeto passado; e
- toString(): retorna o tipo do objeto como uma string. Para não conflitar com a função toString() (poderiam ter nomes diferentes) dos protótipos de Array, String entre outros é necessário utilizar o método call direto de Object: Object.prototype.toString.call(valor).