JSJavaScript · Lesson 6 of 14

Classes & Modules

ES6 brought classes to JavaScript. They're syntactic sugar over prototypes, but don't let that ruin the moment.

JavaScript
class Animal {
  #name;  // private field (# prefix)

  constructor(name, sound) {
    this.#name = name;
    this.sound = sound;
  }

  speak() {
    return `${this.#name} says ${this.sound}`;
  }

  get name() { return this.#name; }  // getter
}

class Dog extends Animal {
  constructor(name) {
    super(name, "Woof");  // call parent constructor
    this.tricks = [];
  }

  learn(trick) {
    this.tricks.push(trick);
    return this;  // enables chaining
  }

  showTricks() {
    return `${this.name} knows: ${this.tricks.join(", ")}`;
  }
}

const dog = new Dog("Rex");
dog.learn("sit").learn("shake").learn("roll over");
console.log(dog.speak());       // Rex says Woof
console.log(dog.showTricks());  // Rex knows: sit, shake, roll over
JavaScript
// ES Modules — one file, one module

// math.js
export const PI = 3.14159;
export function add(a, b) { return a + b; }
export function multiply(a, b) { return a * b; }
export default function square(x) { return x * x; }

// In another file:
// import square, { PI, add } from './math.js';
// console.log(square(4));  // 16
// console.log(add(2, 3));  // 5

// CommonJS (Node.js older style)
// module.exports = { add, multiply };
// const { add } = require('./math');

// Dynamic import (lazy loading)
// const module = await import('./heavy-module.js');
◆ Note
In modern Node.js (with "type": "module" in package.json) and all modern browsers, use ES module syntax (import/export). In older Node.js code you'll see CommonJS (require/module.exports).