DEV Community

Cover image for Mastering JavaScript Classes: A Comprehensive Guide.πŸš€πŸš€πŸ’ͺ
Dharmendra Kumar
Dharmendra Kumar

Posted on

Mastering JavaScript Classes: A Comprehensive Guide.πŸš€πŸš€πŸ’ͺ

Introduction

JavaScript classes, introduced in ECMAScript 2015 (ES6), provide a much cleaner and more intuitive syntax for creating objects and dealing with inheritance. This post explores JavaScript classes in depth, covering essential concepts and features with clear examples.


1. Overview

JavaScript classes are templates for creating objects. They encapsulate data with code to work on that data. Although they are primarily syntactical sugar over JavaScript's existing prototype-based inheritance, classes make object-oriented programming more accessible and easier to understand.

Example:

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

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const person1 = new Person('Alice', 30);
person1.greet(); // Hello, my name is Alice and I am 30 years old.
Enter fullscreen mode Exit fullscreen mode

2. Constructor

The constructor method is a special method for creating and initializing an object created with a class. There can be only one special method with the name "constructor" in a class.

Example:

class Car {
  constructor(brand, model) {
    this.brand = brand;
    this.model = model;
  }

  displayInfo() {
    console.log(`This car is a ${this.brand} ${this.model}.`);
  }
}

const myCar = new Car('Toyota', 'Corolla');
myCar.displayInfo(); // This car is a Toyota Corolla.
Enter fullscreen mode Exit fullscreen mode

3. Extends

The extends keyword is used in class declarations or class expressions to create a class that is a child of another class.

Example:

class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    console.log(`${this.name} makes a noise.`);
  }
}

class Dog extends Animal {
  speak() {
    console.log(`${this.name} barks.`);
  }
}

const myDog = new Dog('Rex');
myDog.speak(); // Rex barks.
Enter fullscreen mode Exit fullscreen mode

4. Private Properties

Private properties are declared with a # prefix, making them inaccessible from outside the class.

Example:

class User {
  #password;

  constructor(username, password) {
    this.username = username;
    this.#password = password;
  }

  checkPassword(password) {
    return this.#password === password;
  }
}

const user1 = new User('john_doe', '12345');
console.log(user1.checkPassword('12345')); // true
console.log(user1.#password); // SyntaxError: Private field '#password' must be declared in an enclosing class
Enter fullscreen mode Exit fullscreen mode

5. Public Class Fields

Public class fields are properties that can be defined directly within the class body, making them more concise and readable.

Example:

class Product {
  name = 'Default';
  price = 0;

  constructor(name, price) {
    this.name = name;
    this.price = price;
  }

  displayProduct() {
    console.log(`Product: ${this.name}, Price: $${this.price}`);
  }
}

const product1 = new Product('Laptop', 1200);
product1.displayProduct(); // Product: Laptop, Price: $1200
Enter fullscreen mode Exit fullscreen mode

6. Static Methods

Static methods are called on the class itself, not on instances of the class. They are often used to create utility functions.

Example:

class MathUtils {
  static add(a, b) {
    return a + b;
  }

  static subtract(a, b) {
    return a - b;
  }
}

console.log(MathUtils.add(5, 3)); // 8
console.log(MathUtils.subtract(5, 3)); // 2
Enter fullscreen mode Exit fullscreen mode

7. Static Initialization Blocks

Static initialization blocks allow you to perform complex initialization of static properties.

Example:

class Config {
  static API_URL;
  static PORT;

  static {
    this.API_URL = 'https://api.example.com';
    this.PORT = 8080;
  }

  static getConfig() {
    return `API URL: ${this.API_URL}, PORT: ${this.PORT}`;
  }
}

console.log(Config.getConfig()); // API URL: https://api.example.com, PORT: 8080
Enter fullscreen mode Exit fullscreen mode

8. Getters and Setters

Getters and setters are used to define methods that get and set the value of an object’s properties.

Example:

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

  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }

  set fullName(name) {
    [this.firstName, this.lastName] = name.split(' ');
  }
}

const person = new Person('John', 'Doe');
console.log(person.fullName); // John Doe
person.fullName = 'Jane Smith';
console.log(person.fullName); // Jane Smith
Enter fullscreen mode Exit fullscreen mode

9. Instance Methods

Instance methods are methods defined within a class that operate on instances of that class.

Example:

class Rectangle {
  constructor(width, height) {
    this.width = width;
    this.height = height;
  }

  area() {
    return this.width * this.height;
  }

  perimeter() {
    return 2 * (this.width + this.height);
  }
}

const rectangle = new Rectangle(10, 5);
console.log(rectangle.area()); // 50
console.log(rectangle.perimeter()); // 30
Enter fullscreen mode Exit fullscreen mode

Conclusion

JavaScript classes offer a clean and concise way to create and manage objects, providing a range of features to support object-oriented programming. By understanding constructors, inheritance, private properties, public fields, static methods, and other concepts, you can leverage the full power of JavaScript classes in your projects. Happy coding!

Top comments (0)