Codectionary / Developer documentation / JavaScript

Classes

Classes provide syntax for creating objects with shared structure and behavior, built on top of JavaScript's existing prototype-based inheritance. A class has a constructor for initialization, methods shared across instances, and can extend another class to inherit its behavior via the extends and super keywords.

Syntax

class Name {
  constructor(params) { }
  method() { }
}

Examples

Basic Class

Defining a class with a constructor and methods.

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hi, I am ${this.name}, age ${this.age}`);
  }
}

const alice = new Person("Alice", 25);
alice.greet(); // "Hi, I am Alice, age 25"

Inheritance with extends and super

Creating a subclass that builds on a parent class.

class Animal {
  constructor(name) {
    this.name = name;
  }
  speak() {
    console.log(`${this.name} makes a sound`);
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name); // calls the parent constructor
    this.breed = breed;
  }
  speak() {
    console.log(`${this.name} barks`); // overrides the parent method
  }
}

const dog = new Dog("Rex", "Labrador");
dog.speak(); // "Rex barks"

Static Methods and Private Fields

Class-level methods and truly private instance fields (using #).

class Counter {
  #count = 0; // private field, inaccessible from outside the class

  increment() {
    this.#count++;
    return this.#count;
  }

  static describe() {
    return "A simple counter class";
  }
}

const counter = new Counter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
// console.log(counter.#count); // SyntaxError - private field

console.log(Counter.describe()); // called on the class itself, not an instance

Best practices

  • Always call super() in a subclass constructor before accessing this
  • Use private fields (#field) for internal state that should not be accessed or modified from outside the class
  • Prefer composition over deep inheritance chains - favor small, focused classes over sprawling hierarchies
  • Use static methods for functionality related to the class itself rather than any particular instance

At a glance

Purpose
Application logic and interaction
File extension
.js ยท .mjs
Runs in
Browsers and JavaScript runtimes
Usually used with
HTML, CSS and Web APIs

Specifications & further reading

Related JavaScript documentation