Tutorial Completo de Classes e Herança em ES6+ JavaScript
Domine Objetos Avançados e Prototipagem em JavaScript
Neste tutorial, vamos explorar objetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. avançados no JavaScript
Introdução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente. e entender em detalhes como funciona a prototipagem. Abordaremos desde configurações mais refinadas de propriedades
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. até o funcionamento interno do mecanismo de herança baseado em protótipos.
Ao final, você terá uma visão clara de como estender, modificar e criar comportamentos altamente customizáveis em seus objetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web., aproveitando ao máximo as funcionalidades da linguagem.
Revisão Rápida sobre Objetos em JavaScript🔗
Em JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente., um objeto é formado por pares de chave e valor. Por exemplo:
const usuario = {
nome: "Maria",
idade: 28
};
Apesar de parecer simples, objetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. possuem recursos poderosos que vão além de armazenar dados. Vamos explorar essas possibilidades avançadas logo a seguir.
Aprofundando Propriedades: Descritores e Configuração🔗
Cada propriedadeClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. de um objeto em JavaScript possui atributos de configuração que definem como ela se comporta. Isso pode ser inspecionado e ajustado usando métodos como
Object
e Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..getOwnPropertyDescriptor()
Object
.Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..defineProperty()
- Enumerable (enumerável): indica se a propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. aparece em operações de listagem (como
for
).Estruturas de Controle: if, switch e loopsAprenda as estruturas de controle em JavaScript, como if/else, switch e loops, com exemplos claros e didáticos para otimizar seu código e lógica de programação....in
- Writable (editável): indica se o valor da propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. pode ser alterado.
- Configurable (configurável): indica se a propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. pode ser removida ou ter seu descritor alterado.
- Value (valor): o valor armazenado na propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters..
- get e set: funções
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. que interceptam a leitura e a escrita do valor.
Por exemplo, se quisermos criar uma propriedadeClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. não enumerável:
const produto = {
nome: "Caneta",
preco: 1.5
};
// Definindo uma propriedade não enumerável:
Object.defineProperty(produto, "fabricante", {
value: "Marca XYZ",
enumerable: false
});
// "fabricante" não aparecerá em um loop for...in:
for (let chave in produto) {
console.log(chave); // nome, preco
}
Observe que fabricante
não aparece no loop porque não é enumerável.
Propriedades de Acesso (Getters e Setters)🔗
Outra característica interessante são as propriedadesClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. de acesso. Elas permitem que você controle como uma informação é lida (getter) e escrita (setter). É útil para validar
Validação de Código: W3C Validator e DebuggingAprenda a validar e corrigir erros de HTML com o W3C Validator. Descubra técnicas de debugging para melhorar a compatibilidade e a manutenção do seu site., formatar e processar valores de maneira centralizada.
const pessoa = {
_nome: "Carlos",
_sobrenome: "Santos",
get nomeCompleto() {
return `${this._nome} ${this._sobrenome}`;
},
set nomeCompleto(nome) {
const partes = nome.split(" ");
this._nome = partes[0];
this._sobrenome = partes[1] || "";
}
};
console.log(pessoa.nomeCompleto); // "Carlos Santos"
pessoa.nomeCompleto = "João Silva";
console.log(pessoa._nome); // "João"
console.log(pessoa._sobrenome); // "Silva"
Repare que aqui usamos _nome
e _sobrenome
como propriedades internas para demonstrar a ideia de encapsulamentoClosures e CurryingDescubra como utilizar closures para gerenciamento de escopo e currying para funções parciais, elevando seu código JavaScript a um novo patamar de modularidade.. Você pode escolher a convenção de nomenclatura que preferir, mas é comum usar o sublinhado para denotar campos “privados” em JavaScript.
Entendendo o Conceito de Prototype🔗
Enquanto a maioria das linguagens orientadas a objetos usam herança de classe, o JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente. faz isso via prototipagem. Cada objeto em JavaScript
Introdução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente., por padrão, tem uma referência para um outro objeto chamado de seu protótipo (ou prototype). As propriedades
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. e métodos do protótipo são herdados e ficam disponíveis para o objeto que o referencia.
- Quando acessamos uma propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. em um objeto, o JavaScript primeiro procura nela própria.
- Caso não encontre, ele “sobe” na cadeia de protótipos, verificando em seu protótipo.
- Isso prossegue até chegar no objeto
Fundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web.
Object
, que é o último da cadeia.Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..prototype
Podemos visualizar de forma simplificada a cadeia de protótipos assim:
Quando chegamos em Object
e a propriedadeVariáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..prototype
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. ainda não foi encontrada, o resultado é
undefined
.Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação.
Criando Objetos com Prototype Específico🔗
Uma forma de controlar o protótipo de um objeto é utilizar a funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas.
Object
. Com ela, você define explicitamente qual é o protótipo do objetoVariáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..create()
Fundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. recém-criado.
const animal = {
tipo: "desconhecido",
fazerSom() {
console.log("Som genérico...");
}
};
const gato = Object.create(animal);
gato.tipo = "Gato";
gato.fazerSom(); // "Som genérico..."
Note que gato
não possui a propriedadeClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters.
fazerSom
em si, mas ela é encontrada em seu protótipo animal
. Quando chamamos gato.fazerSom()
, o JavaScriptIntrodução ao JavaScript e Configuração do AmbienteDescubra neste tutorial narrativo como configurar seu ambiente de desenvolvimento e começar a programar em JavaScript de maneira prática e eficiente. busca no objeto
gato
e, não encontrando, usa animal.fazerSom
.
Verificando e Alterando o Prototype🔗
Para manipular diretamente o prototype de um objeto, podemos recorrer a métodosClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. como:
- Object
Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..getPrototypeOf(obj): retorna o protótipo do objeto
Fundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web..
- Object
Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..setPrototypeOf(obj, protótipo): define um novo protótipo.
Por exemplo:
const veiculo = {
tipo: "Desconhecido"
};
const carro = {
rodas: 4
};
// Ajusta o protótipo de "carro" para o objeto "veiculo"
Object.setPrototypeOf(carro, veiculo);
console.log(carro.tipo); // "Desconhecido"
console.log(Object.getPrototypeOf(carro) === veiculo); // true
Construtores e Prototype🔗
Outra prática comum é criar objetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. usando funções
Funções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. construtoras. O JavaScript vincula a propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters.
prototype
da funçãoFunções e Escopo no JavaScriptAprenda a utilizar funções e escopos em JavaScript com nosso guia prático. Melhore sua organização de código e evolua seus projetos com boas práticas. construtora ao objeto que será o protótipo das instâncias criadas por ela.
function Livro(titulo, autor) {
this.titulo = titulo;
this.autor = autor;
}
Livro.prototype.exibirInfos = function () {
console.log(`Título: ${this.titulo}, Autor: ${this.autor}`);
};
const meuLivro = new Livro("JavaScript Avançado", "Desenvolvedor JS");
meuLivro.exibirInfos(); // "Título: JavaScript Avançado, Autor: Desenvolvedor JS"
Perceba que exibirInfos()
não está diretamente em meuLivro
, mas no objetoFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. associado a
Livro.prototype
. Toda instância de Livro
herdará exibirInfos()
através da cadeia de protótipos.
Boas Práticas na Criação de Objetos Avançados🔗
1. Use Object
para configurações específicas: Se precisar de controle fino sobre enumerabilidade ou sobre setter/getter, prefira esse método ao criar as propriedadesVariáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..defineProperty()
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters..
2. Evite sobrescrever o protótipo nativo de objetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. básicos: Alterar
Object
ou Variáveis, Tipos de Dados e OperadoresAprenda os conceitos essenciais de JavaScript, explorando variáveis, tipos de dados e operadores com exemplos claros e práticas dicas de programação..prototype
Array
pode causar comportamentos inesperados em toda a aplicação.Fundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web..prototype
3. Mantenha clara a origem dos métodosClasses e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. e dados: Quando há muitos níveis de protótipo, é essencial manter o código organizado para que a origem de cada método
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters. seja compreensível.
Conclusão🔗
Compreender objetosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. avançados e prototipagem é fundamental para aproveitar ao máximo as capacidades do JavaScript. Sabendo manipular descritores de propriedade
Classes e Herança em ES6+Aprenda a dominar classes e herança em ES6+: escreva códigos JavaScript claros e eficientes com métodos, getters e setters., definir getters e setters, criar cadeias de protótipos customizadas e trabalhar com funções construtoras, você consegue estruturar seu código de forma mais flexível e poderosa.
Essa base será de grande utilidade quando você avançar em aplicações que exijam estruturas de dadosFundamentos de Arrays e ObjetosDomine arrays e objetos em JavaScript com este tutorial narrativo. Aprenda a utilizar métodos e exemplos práticos para aprimorar seu desenvolvimento web. complexas, arquitetura mais robusta ou herança entre diversos componentes. Esperamos que este tutorial tenha ajudado a iluminar o caminho dos objetos avançados em JavaScript e a demonstrar o que é possível antes mesmo de pensar em outras formas de abstração. Explore, pratique bastante e descubra como deixar seu código mais expressivo por meio dessa característica essencial da linguagem!
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação oficial do MDN: developer.mozilla.org/pt-BR/docs/Web/JavaScript
- ECMAScript® Language Specification: tc39.es/ecma262/