Nível de Classe vs. Nível de Instância
Parte da seção Programação Orientada a Objetos do Journey de JavaScript da Coddy — lição 31 de 56.
Em classes JavaScript, existem dois níveis distintos de propriedades e métodos:
- Nível de instância: Propriedades e métodos que pertencem a cada objeto individual criado a partir da classe.
- Nível de classe: Propriedades e métodos que pertencem à própria classe, não às instâncias.
Vamos entender a diferença:
Primeiro, vamos examinar os membros de nível de instância. Crie uma classe comum com um método de instância:
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
}Crie uma instância da classe Car:
const myCar = new Car("Toyota");Chame o método de instância:
console.log(myCar.drive()); // Saída: "The Toyota is driving"Observe que cada instância recebe sua própria cópia do método drive e pode acessar suas próprias propriedades usando this.
Agora, vamos olhar para os membros de nível de classe. Adicionamos um método estático à nossa classe. Use a palavra-chave static na frente do nome do método para criar um método que pertence à própria classe, não às instâncias.
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
static compareModels(car1, car2) {
return `Comparing ${car1.make} with ${car2.make}`;
}
}Métodos estáticos são úteis para funções utilitárias que não dependem de dados de instâncias específicas. O método estático é chamado na própria classe, não nas instâncias:
const car1 = new Car("Toyota");
const car2 = new Car("Honda");
console.log(Car.compareModels(car1, car2)); // Saída: "Comparing Toyota with Honda"Tentar chamar um método estático em uma instância resultará em um erro:
car1.compareModels(car1, car2); // Erro: car1.compareModels não é uma funçãoDesafio
Você recebeu uma classe Calculator apenas com um construtor. Sua tarefa é adicionar dois métodos:
1. Método de Instância <strong>add(number)</strong>
- Adiciona o número fornecido ao valor atual da calculadora
Atualiza
this.valuee retorna o novo valor*Ele é chamado em instâncias da calculadora:
calc.add(3)
2. Método Estático <strong>multiply(num1, num2)</strong>
- Recebe dois números e retorna o produto deles
NÃO utiliza
this(métodos estáticos não possuem dados de instância)*Ele é chamado na própria classe Calculator:
Calculator.multiply(4, 6)
Folha de consulta
As classes JavaScript têm dois níveis de propriedades e métodos:
- Nível de instância: Pertencem a cada objeto individual criado a partir da classe
- Nível de classe: Pertencem à própria classe, não às instâncias
Métodos de Instância:
Métodos regulares que podem acessar propriedades de instância usando this:
class Car {
constructor(make) {
this.make = make;
}
drive() {
return `The ${this.make} is driving`;
}
}
const myCar = new Car("Toyota");
console.log(myCar.drive()); // "The Toyota is driving"Métodos Estáticos:
Use a palavra-chave static para criar métodos que pertencem à própria classe. Eles são chamados na classe, não nas instâncias:
class Car {
static compareModels(car1, car2) {
return `Comparing ${car1.make} with ${car2.make}`;
}
}
const car1 = new Car("Toyota");
const car2 = new Car("Honda");
// Chamada na própria classe
console.log(Car.compareModels(car1, car2)); // "Comparing Toyota with Honda"
// Chamar em uma instância causa um erro
car1.compareModels(car1, car2); // Error: car1.compareModels is not a functionMétodos estáticos são úteis para funções utilitárias que não dependem de dados de instâncias específicas.
Experimente você mesmo
import { Calculator } from './calculator.js';
// Não modifique o código abaixo
const calc = new Calculator(5); // Cria a calculadora com valor = 5
const result1 = calc.add(3); // Deve somar 3 → 5 + 3 = 8
const result2 = Calculator.multiply(4, 6); // Deve multiplicar 4 × 6 = 24
console.log(result1); // Esperado: 8
console.log(result2); // Esperado: 24Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação Orientada a Objetos
1Objetos e a Palavra-chave this
Revisão Rápida: ObjetosAdicionando Métodos a ObjetosEntendendo a Palavra-chave thisFunções ConstrutorasA Palavra-chave newDesafio de Recapitulação7Herança e a palavra-chave extends
HerançaA relação "é um"A palavra-chave extendsO método super()Herdando propriedades e métodosDesafio de recapitulação10Polimorfismo
O que é Polimorfismo?Sobrescrevendo Métodos HerdadosUsando superDesafio de Recapitulação13Composição vs. Herança
A relação "tem um" vs. "é um"Os limites da herança profundaConstruindo objetos2Organizando o Código
O que são Módulos?Exportando com exportImportando com importExportações Default vs. Nomeadas5Encapsulamento e Acesso
EncapsulamentoCampos de Classe Públicos e PrivadosMétodos PrivadosDesafio de Recapitulação8Organizando Código POO
Organizar Classes em Módulos11Projeto: Um Renderizador de Formas
Configuração: Classe Shape e ExportaçãoHerança da Classe Circle14Sistema de Gerenciamento de Biblioteca
Projetando a BibliotecaClasse Livro com Composição9Métodos e Propriedades Estáticos
Nível de Classe vs. Nível de InstânciaPropriedades EstáticasMétodos Utilitários EstáticosDesafio de Recapitulação