📦 ES6 Classes = OOP in JavaScript
Prototypes are confusing. ES6 Classes make OOP simple. Constructor, inheritance, methods.
📝 Class Basics
// Class declaration
class User {
constructor(name, email) {
this.name = name;
this.email = email;
this.createdAt = new Date();
}
greet() {
return `Hello, ${this.name}!`;
}
getEmail() {
return this.email;
}
}
// Usage
const user = new User('Alice', 'alice@example.com');
console.log(user.greet()); // Hello, Alice!
// Class expression
const Person = class {
constructor(name) {
this.name = name;
}
};
// Static methods
class MathUtils {
static add(a, b) {
return a + b;
}
}
MathUtils.add(5, 3); // 8
// Getters and setters
class Product {
constructor(name, price) {
this._name = name;
this._price = price;
}
get price() {
return this._price;
}
set price(value) {
if (value < 0) throw new Error('Price cannot be negative');
this._price = value;
}
}
🎯 Inheritance
// Inheritance
class Admin extends User {
constructor(name, email, role) {
super(name, email);
this.role = role;
}
greet() {
return `Hello, Admin ${this.name}!`;
}
manageUsers() {
return 'Managing users...';
}
}
const admin = new Admin('Bob', 'bob@example.com', 'admin');
console.log(admin.greet()); // Hello, Admin Bob!
console.log(admin.manageUsers()); // Managing users...
// Abstract class pattern
class Shape {
constructor() {
if (this.constructor === Shape) {
throw new Error('Cannot instantiate abstract class');
}
}
getArea() {
throw new Error('Method must be implemented');
}
}
class Circle extends Shape {
constructor(radius) {
super();
this.radius = radius;
}
getArea() {
return Math.PI * this.radius ** 2;
}
}
// Mixins
const loggerMixin = {
log(message) {
console.log(`[LOG] ${message}`);
}
};
class Service {
// Use Object.assign
}
Object.assign(Service.prototype, loggerMixin);
💡 Class Tips
- Use constructor for initialization
- Use super() in derived classes
- Use static methods for utilities
- Use getters/setters for control
- Use inheritance for specialization
"ES6 Classes bring OOP to JavaScript. Clean, simple, powerful. Essential for modern JS."
