Todo objeto em JavaScript é NULL?
A gente acha que não precisa saber de programação orientada a objetos, até se deparar com prototype chaining, um estudo que tive sobre objetos no javascript que quero trazer pra você.
A parte mais complexa em programação muitas as vezes é explicar o simples de forma efetiva….
Você sabe o que é um objeto e a uma função?
Pra que um objeto serve, e como ele deve se transformar para garantir que os dados sejam entregues de forma efetiva?
Gosta do meu conteúdo aqui? Que tal deixar um comentário e se inscrever no tech insights weekly para motivar mais conteúdos como esse por aqui!?
Trabalhando com objetos
Hoje eu quero ser bem direta com você, pois quando comecei meus estudos em JavaScript me deparei com o conceito de: Protype Chaining
Acredito que, seja necessário que todas pessoa dev, tenha que entender como objetos funciona.
Em JavaScript eu noto que eles se comportam como se fossem objetos na vida real assim como a maioria dos objetos se comportam das demais linguagens de programação que trabalhei profissionalmente.
No JavaScript objeto têm suas propriedades e é tratado com entidade independente e tipo.
Eu gosto de pensar sempre na entidade cachorro (super comum em orientação a objetos né, 😬), um cachorro tem caracteristicas que definem ele como único como cor, raça, onomatopeias e etc…
Trabalhando com objetos
Prototype Chain
Um dos estudos cruciais pra qualquer dev JavaScript é entender é a base na qual a mesma funciona.
É ai que chegamos em prototype chain, que basicamente é maneira na qual os objetos são vinculados uns com os outros.
Em JavaScript, os objetos são criados a partir de um protótipo. O protótipo é um objeto que contém as propriedades e métodos que o objeto herda.
Vou “javificar“ aqui pra você e trazer o pilar de herança em orientação a objetos, um objeto pra herdar o outro precisa construí-lo através do construtor e por fim acessa ele utilizando o this.
Quando um objeto é criado no JavaScript, ele é inicializado com um protótipo. O protótipo do objeto é definido pelo construtor do objeto.
Para acessar uma propriedade de um objeto, o JavaScript primeiro verifica se a propriedade existe no próprio objeto. Se não existir, o JavaScript verifica se a propriedade existe no protótipo do objeto. Se a propriedade existir no protótipo, o JavaScript retorna o valor da propriedade do protótipo.
No exemplo de código acima repare que eu crio a instancia nome para a Pessoa, atribuo um valor para a mesa e quando eu quero inserir outras caracteristicas eu “invoco“ o proto da função e atribuo o valor que eu quero.
No outro momento eu quero que a minha função Pessoa seja um Aluno, pra isso eu chamo meu prototype create e através do Object eu consigo acessar e criar novas característas.
Para acessar uma propriedade de um objeto, o JavaScript primeiro verifica se a propriedade existe no próprio objeto. Se não existir, o JavaScript verifica se a propriedade existe no protótipo do objeto. Se a propriedade existir no protótipo, o JavaScript retorna o valor da propriedade do protótipo.
Dando um new eu consigo invocar os mesmos para meu cliente, no caso um console.log()
E aonde que entra o NULL?
Bom, até aqui acho que ficou bem claro como herança é super presente em prototype chain, dito isso quando um objeto precisa acessar um outro objeto de herança que seja NULL o mesmo vai retornar NULL pro cliente final
…
Mais simples impossível, mas por que isso é diferente?
Por que estamos acostumados com o undefined em JavaScript, na real, em alguns sites e até nas próprias IAs ai da vida é considerado errado o NULL no JavaScript, mas o mesmo pode sim acontecer.
No conceito de herança é utilizado muito o objeto PAI que herda os filhos e assim por diante
…
Em JavaScript, todo objeto é um objeto literal. Um objeto literal é um objeto que é criado usando a sintaxe de objeto literal. Por exemplo:
const objeto = {
nome: "Fulano",
idade: 30,
};
O objeto objeto é um objeto literal. Ele tem as propriedades nome e idade.
Quando um objeto literal é criado, ele tem um protótipo. O protótipo é um objeto que contém propriedades e métodos que o objeto literal herda.
O protótipo do objeto objeto é o objeto Object.prototype. O objeto Object.prototype é o protótipo de todos os objetos em JavaScript. Ele contém propriedades e métodos comuns a todos os objetos.
O prototype chaining é o processo de procurar uma propriedade em um objeto, começando pelo próprio objeto e, em seguida, seguindo o protótipo do objeto.
Quando um objeto tenta acessar uma propriedade que não existe nele, o JavaScript procura a propriedade no protótipo do objeto. Se a propriedade não existir no protótipo, o JavaScript procura a propriedade no protótipo do protótipo, e assim por diante.
O protótipo do objeto Object.prototype é null. Isso significa que, se um objeto tentar acessar uma propriedade que não existe nele e no seu protótipo, o JavaScript retornará null.
Portanto, todo objeto em JavaScript é null por conta do prototype chaining. Isso ocorre porque o protótipo do objeto Object.prototype é null.
Aqui está um exemplo de como o prototype chaining funciona:
const objeto = {
nome: "Fulano",
};
console.log(objeto.idade); // undefined
O console.log acima está tentando acessar a propriedade idade do objeto objeto. A propriedade idade não existe no objeto objeto. Portanto, o JavaScript procura a propriedade no protótipo do objeto objeto, que é o objeto Object.prototype.
O objeto Object.prototype não tem a propriedade idade. Portanto, o JavaScript retorna undefined.
Podemos corrigir esse problema definindo a propriedade idade no protótipo do objeto objeto:
Object.prototype.idade = 30;
const objeto = {
nome: "Fulano",
};
console.log(objeto.idade); // 30
Porém isso não é muito comum no JavaScript
Falar de orientação a objetos pra devs JavaScript é inusitado, porém muito necessário.
O prototype chaining é um conceito fundamental que permite que a herança de objetos funcione em JavaScript.
Estude orientação a objetos - herança
A herança é um princípio fundamental da programação orientada a objetos (POO). Permite que os objetos compartilhem propriedades e métodos entre si.
Como alguns sabem, eu vim do Java que é todo baseado nesse paradigma de prgramação, e na minha opinião facilita muito percepção de código e entendimento de padrões de boas práticas quando dominado esse paradigma.
Como eu disse mais acima pra você, em JavaScript, a herança é implementada por meio de protótipos. Quando um objeto filho herda de um objeto pai, o protótipo do objeto filho é definido como sendo um objeto criado usando a função Object.create(). O parâmetro da função Object.create() é o protótipo do objeto pai.
Isso significa que o protótipo do objeto filho está ligado ao protótipo do objeto pai. Quando um objeto filho acessa uma propriedade, o JavaScript primeiro verifica se a propriedade existe no próprio objeto filho. Se não existir, o JavaScript verifica se a propriedade existe no protótipo do objeto filho. Se a propriedade não existir no protótipo do objeto filho, o JavaScript verifica se a propriedade existe no protótipo do objeto pai.
Como eu gosto de fugir do comum desenvolvi um exemplo não tão comum de herança pra facilitar o entendimento:
Em um jogo de RPG, a classe
Personagempode ser a classe pai de classes comoGuerreiro,MagoeArqueiro. Os objetos da classePersonagemterão acesso a propriedades e métodos comuns a todos os personagens do jogo, comovida,manaeataque. Os objetos das classesGuerreiro,MagoeArqueiroterão acesso a propriedades e métodos adicionais que são específicos de cada classe, comohabilidades de combateouhabilidades mágicas.
Esses serão os retornos esperados:
A herança é uma ferramenta poderosa que pode ser usada para tornar o código mais conciso e reutilizável.
ENTENDA PRÍNCIPIOS DE PROGRAMAÇÃO
Acho que a maior conclusão desse conteúdo é entender bases para facilitar entender como linguagens funcionam por debaixo dos panos.
A primeira vez que quis estudar protoype eu já sabia toda base de orientação a objetos, então pra mim foi super simples assimilar tudo o que precisava.
Mas claro, eu vim de uma carreira de 4 anos com Java!
Mas isso não te impede de desde já começar a estudar sobre isso.
Nos meus canais tenhos vários conteúdos sobre base de programação pra pessoas pleno, sênior na qual aprofundo ao máximo como usar essa base ao seu favor!
Fico por aqui, e espero que esse conteúdo te agrege na sua semana se trabalho!
Dicas da semana! 🔥
Grupo de programação JavaScript online - https://guild.host/events/js-code-club-online-gdr9gl
Álbum da semana




