Classes and OOP
The Security Breach That Never Happened
// payment-service.js - Old JavaScript code
class PaymentProcessor {
constructor(apiKey, secretKey) {
this.apiKey = apiKey;
this.secretKey = secretKey;
}
processPayment(amount, cardToken) {
// All properties are public!
const signature = this.generateSignature(amount, cardToken);
return fetch('/api/payments', {
headers: {
'X-API-Key': this.apiKey,
'X-Signature': signature
}
});
}
generateSignature(amount, cardToken) {
return crypto.createHmac('sha256', this.secretKey)
.update(`${amount}:${cardToken}`)
.digest('hex');
}
}
// Later in the code...
const processor = new PaymentProcessor(API_KEY, SECRET_KEY);
// Someone logged the entire object for debugging
console.log('Processor:', processor);
// OUTPUT: { apiKey: '...', secretKey: '...' } // SECRET EXPOSED!Basic Class Syntax
Simple Class
Property Initialization
Access Modifiers
public (default)
private
protected
Real-World Example
Parameter Properties
Before Parameter Properties
With Parameter Properties
Mixed Access Modifiers
Readonly Properties
Basic Readonly
Readonly Parameter Properties
Getters and Setters
Basic Accessor
Computed Properties
Validation in Setters
Static Members
Static Properties
Static Factory Methods
Abstract Classes
Basic Abstract Class
Implementing Interfaces
Single Interface
Multiple Interfaces
Real-World Patterns
1. Repository Pattern
2. Service Layer Pattern
3. Builder Pattern
Your Challenge
Key Takeaways
What I Learned
Last updated