Understanding Classes in JavaScript: A Modern Approach

Learn about classes in JavaScript, including their syntax, constructors, methods, properties, and best practices. Discover how to create objects using classes and understand the concept of inheritance.



JavaScript Classes

While JavaScript traditionally relied on constructor functions to mimic class-like behavior, ES6 introduced the class keyword for a more structured approach to object-oriented programming.

Basic Class Structure:

Syntax

class Person {
  constructor(firstName, lastName) {
    this.firstName = firstName;
    this.lastName = lastName;
  }

  greet() {
    console.log(`Hello, ${this.firstName} ${this.lastName}!`);
  }
}
            

Output


Hello, Alice Smith!
            

Key Components:

  • class keyword: Defines a class.
  • constructor method: Initializes object properties.
  • Methods: Functions defined within the class.
  • this keyword: Refers to the current object instance.

Creating Objects:

Syntax

const person1 = new Person("Alice", "Smith");
person1.greet(); // Output: Hello, Alice Smith!
            

Inheritance

JavaScript supports inheritance using the extends keyword:

Syntax

class Student extends Person {
  constructor(firstName, lastName, studentId) {
    super(firstName, lastName); // Call parent constructor
    this.studentId = studentId;
  }

  study() {
    console.log(`${this.firstName} is studying.`);
  }
}

const student1 = new Student("Bob", "Johnson", 12345);
student1.greet(); // Inherited from Person
student1.study(); // Specific to Student
            

Important Considerations

  • Prototypal Inheritance: JavaScript's class syntax is built on top of its prototype-based inheritance system.
  • this keyword: Be mindful of its behavior within different contexts (methods, constructors, arrow functions).
  • Static Methods: Use the static keyword to define methods that belong to the class itself, not instances.
  • Getters and Setters: Use get and set accessors for property control.

Example with Getters and Setters

Syntax

class Circle {
  constructor(radius) {
    this._radius = radius;
  }

  get radius() {
    return this._radius;
  }

  set radius(value) {
    if (value < 0) {
      throw new Error("Radius cannot be negative");
    }
    this._radius = value;
  }

  get area() {
    return Math.PI * this._radius * this._radius;
  }
}
            

Conclusion

JavaScript classes provide a more structured and intuitive way to define objects and their behavior. By understanding the core concepts and best practices, you can write cleaner, more maintainable, and object-oriented code.