Compreendendo os protótipos em JavaScript pode ser complexo se não tivermos uma abordagem adequada. No entanto, com a strangeira paciência, podemos desvendar esse fundamental conceito.
Conhecimentos Previos:
Se você está aqui, hopefully, você já tem uma base básica em JavaScript. Caso contrário, leia brevemente sobre as operações básicas como a criação de variáveis, operadores e estruturas de controle. Agora, vamos avançar.
PDF Um dos conceitos mais confusos é a diferença entre function, prototipo e instantiation. Em JavaScript, não existem classes no sentido convencional. Tudo é baseado no prototipo, ou seja, tudo é objeto. Isso inclui funções, arrays, números inteiros, etc. Isso pode parecer surpreendente, mas é fundamental para entender o funcionamento do JavaScript.
PDF Outro ponto crucial é a palavra-chave prototipo. O prototipo é uma propriedade que cada objeto tem, que armazena os protótipos dos objetos criados com ele. Isso permite que os objetos heracam as características de outros objetos semelhantes.
PDF A palavra-chave instantiation é usada para criar um novo objeto. No JavaScript, a criação de um objeto não é simplesmente new, mas envolve a ideia de protótipos.
Em suma, o JavaScript é baseado no conceito de protótipos em orientação a objetos. Isso significa que todos os objetos são criados com um protótipo base, que pode conter métodos e propriedades que serão heradas por todos os objetos criados com ele. Isso é conhecido como herança prototipingo. Para ilustrar, considere o seguinte exemplo:
const numbers = [1, 2, 3]; // Array tem um prototipo
const evenNumbers = numbersInstantiator(numbers); // Cria um novo objeto com o prototipo da array
console.log(evenNumbers[1]); // Imprime 2
console.log(evenNumbers[2]); // Imprime 4
console.log(evenNumbers[3]); // Imprime 6
Observando o código acima, vemos que o evenNumbers é um novo objeto criado com o prototipo da array. Isso significa que ele hera todas as características da array, como o acesso por índice e a adição de elementos. Outro exemplo:
const objA = { name: 'A', value: 1 };
const objB = new Object({ name: 'B', value: 2 });
Em硅 unintuitive, objB não tem um prototipo direto em objA. No lugar, objB tem um prototipo direto no objeto Object, que é a base do JavaScript. Isso é por que todos os objetos em JavaScript heram do prototipo do Object, inclusive os objetos primitivos como números e strings. Para compreender melhor, vamos olhar para a definição formal do prototipo em JavaScript. O prototipo de um objeto é armazenado na propriedade prototype desse objeto. Isso permite que métodos e propriedades sejam heradas de forma dinâmica. Uma das vantagens do prototipingo em JavaScript é que ele é dinâmico. Isso significa que não é necessário definir as classes de antemano, como em outros languages de programação orientados a objetos. Além disso, o prototipingo em JavaScript permite que múltiplos objetos heram as mesmas características sem a necessidade de se definirem individualmente. Isso é especialmente útil para criação de componentes reutilizáveis em aplicativos web. Para finalizar, vamos ver como é possível alterar o prototipo de um objeto existente. Isso pode ser útil para adicionar ou remover métodos e propriedades em tempo de execução.
const obj = { name: 'World', capitalize: (value) => value.toUpperCase() };
obj.prototype.title = 'My Object';
console.log(obj.title); // Imprime 'My Object'
Observamos que obj.prototype.title é um método que pode ser chamado para transformar o nome do objeto em título. Isso é uma forma simples de adicionar funcionalidade adicional a um objeto existente. Conclusão:
- O JavaScript é baseado no conceito de prototipingo em orientação a objetos.
- Todos os objetos heram do prototipo do objeto Object, inclusive os objetos primitivos.
- O prototipo de um objeto armazena os protótipos dos objetos criados com ele.
- O prototipingo é uma forma de herança dinâmica que permite a adição e a remoção de métodos e propriedades em tempo de execução.
Practique este conceito com os exemplos fornecidos e pratique criar objetos personalizados com protótipos personalizados para melhorar suas habilidades em JavaScript.