ES6+ Features
Modern JavaScript with classes, async/await, and arrow functions:
// Modern JavaScript class
class EventEmitter {
#listeners = new Map();
constructor() {
this.maxListeners = 10;
}
on(event, callback) {
if (!this.#listeners.has(event)) {
this.#listeners.set(event, []);
}
this.#listeners.get(event).push(callback);
return this;
}
emit(event, ...args) {
const callbacks = this.#listeners.get(event);
if (!callbacks) return false;
callbacks.forEach(cb => cb(...args));
return true;
}
off(event, callback) {
const callbacks = this.#listeners.get(event);
if (!callbacks) return this;
const index = callbacks.indexOf(callback);
if (index !== -1) {
callbacks.splice(index, 1);
}
return this;
}
}
// Async/await example
async function fetchUserData(userId) {
try {
const response = await fetch(`/api/users/${userId}`);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data;
} catch (error) {
console.error('Failed to fetch user data:', error);
return null;
}
}