Noções básicas de trabalho com classes
- Definição: Classes em JavaScript são usadas para definir modelos para criar objetos e encapsular dados. Classes incluem um construtor que é um método especial que é chamado automaticamente quando um novo objeto é criado a partir da classe. Ele é usado para inicializar as propriedades do objeto. A palavra-chave
this é usada aqui para se referir à instância atual da classe. Abaixo do construtor, você pode ter o que são chamados de métodos. Métodos são funções definidas dentro de uma classe que executam ações ou operações nos dados ou estado da classe. Eles são usados para definir comportamentos que as instâncias da classe podem executar.
class Dog {
constructor(name) {
this.name = name;
}
bark() {
console.log(${this.name} says woof!);
}
}
const dog = new Dog("Gino");
console.log(dog.name); // Gino
Para criar uma nova instância da classe, você usará a palavra-chave
new seguida pelo nome da classe:
const dog = new Dog("Gino");
Você também pode criar classes como expressões de classe. É quando a classe é anônima e atribuída a uma variável.
const Dog = class {
constructor(name) {
this.name = name;
}
bark() {
console.log(${this.name} says woof!);
}
};
const dog = new Dog("Gino");
console.log(dog.name); // Gino
dog.bark(); // Gino says woof!
Herança de Classe
- Definition: In programming, inheritance allows you to define classes that inherit properties and methods from parent classes. This promotes code reuse and establishes a hierarchical relationship between classes. Uma classe pai é uma classe que funciona como um modelo para outras classes. Ele define propriedades e métodos que são herdados por outras classes. Uma classe filha é uma classe que herda as propriedades e métodos de outra classe. Classes filhas também podem estender a funcionalidade de suas classes pai adicionando novas propriedades e métodos. Em JavaScript, usamos a palavra-chave
extends para implementar herança. Esta palavra-chave indica que uma classe é a classe filha de outra classe.
class Vehicle {
constructor(brand, year) {
this.brand = brand;
this.year = year;
}
}
class Car extends Vehicle {
honk() {
console.log("Honk! Honk!");
}
}
const myCar = new Car("G.E.A.R ACADEMY Motors", 2019);
console.log(myCar.brand); // G.E.A.R ACADEMY Motors
console.log(myCar.year); // 2019
myCar.honk(); // Honk! Honk!
A palavra-chave
super é usada para acessar os métodos, construtores e campos da classe pai.
class Vehicle {
constructor(brand, year) {
this.brand = brand;
this.year = year;
}
}
class Car extends Vehicle {
constructor(brand, year, numDoors) {
super(brand, year);
this.numDoors = numDoors;
}
}
const myCar = new Car("G.E.A.R ACADEMY Motors", 2019, 4);
console.log(myCar.brand); // G.E.A.R ACADEMY Motors
console.log(myCar.year); // 2019
console.log(myCar.numDoors); // 4
Trabalhando com Métodos Estáticos e Propriedades Estáticas
- Métodos estáticos: Esses métodos são frequentemente usados para funções utilitárias que não precisam de acesso ao estado específico de um objeto. Eles são definidos dentro de classes para encapsular funcionalidades relacionadas.
class Movie {
constructor(title, rating) {
this.title = title;
this.rating = rating;
}
static compareMovies(movieA, movieB) {
if (movieA.rating > movieB.rating) {
console.log(${movieA.title} has a higher rating.);
} else if (movieA.rating < movieB.rating) {
console.log(${movieB.title} has a higher rating.);
} else {
console.log("These movies have the same rating.");
}
}
}
let movieA = new Movie("Movie A", 80);
let movieB = new Movie("Movie B", 45);
Movie.compareMovies(movieA, movieB); // Movie A has a higher rating.
Métodos estáticos também são úteis para implementar métodos "factory". Um método factory é um método que você define além do construtor para criar objetos com base em critérios específicos.
class Pizza {
constructor(type, price) {
this.type = type;
this.price = price;
}
static createMargherita() {
return new this("Margherita", 6.99);
}
}
let myPizza = Pizza.createMargherita();
console.log(myPizza); // Pizza { type: "Margherita", price: 6.99 }
console.log(myPizza.type); // Margherita
- Propriedades Estáticas: Essas propriedades são usadas para definir valores ou atributos que estão associados à própria classe, e não às instâncias da classe. Propriedades estáticas são compartilhadas entre todas as instâncias da classe e podem ser acessadas sem criar uma instância da classe.
class Car {
// Static property
static numberOfWheels = 4;
constructor(make, model) {
this.make = make;
this.model = model;
}
// Instance method
getCarInfo() {
return ${this.make} ${this.model};
}
// Static method
static getNumberOfWheels() {
return Car.numberOfWheels;
}
}
// Accessing static property directly from the class
console.log(Car.numberOfWheels); // 4