JavaScript Getters and Setters

In this chapter, we will learn about JavaScript getters and setters. Getters and setters allow you to define methods that are executed when a property is accessed or modified. We will cover:

  • What are Getters and Setters?
  • Creating Getters and Setters
  • Using Getters and Setters
  • Advantages of Getters and Setters
  • Simple Programs using Getters and Setters

What are Getters and Setters?

Getters and setters are special methods in JavaScript that allow you to define custom behavior for when a property is accessed (getter) or modified (setter). They provide a way to intercept property access and assignment, making it possible to add custom logic and validation.

Creating Getters and Setters

You can create getters and setters using the get and set keywords within a class or an object.

Syntax

class ClassName {
  constructor(parameters) {
    // Initialize properties
  }

  // Getter
  get propertyName() {
    // Return a value
  }

  // Setter
  set propertyName(value) {
    // Modify a value
  }
}

Example

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

  // Getter for full name
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }

  // Setter for full name
  set fullName(name) {
    let parts = name.split(' ');
    this.firstName = parts[0];
    this.lastName = parts[1];
  }
}

Using Getters and Setters

Getters and setters are accessed like regular properties.

Example

let person = new Person("Ramesh", "Fadatare");

console.log(person.fullName); // Using the getter

person.fullName = "Neha Sharma"; // Using the setter

console.log(person.firstName);
console.log(person.lastName);

Output:

Ramesh Fadatare
Neha
Sharma

Advantages of Getters and Setters

  • Encapsulation: Getters and setters provide a way to encapsulate the internal representation of data, allowing you to control access and modification.
  • Validation: You can add validation logic within setters to ensure that data meets certain criteria before being assigned.
  • Computed Properties: Getters allow you to create computed properties that are derived from other properties.

Simple Programs using Getters and Setters

Program 1: Temperature Conversion

class Temperature {
  constructor(celsius) {
    this.celsius = celsius;
  }

  // Getter for Fahrenheit
  get fahrenheit() {
    return this.celsius * 9/5 + 32;
  }

  // Setter for Fahrenheit
  set fahrenheit(value) {
    this.celsius = (value - 32) * 5/9;
  }
}

let temp = new Temperature(25);
console.log("Celsius:", temp.celsius);
console.log("Fahrenheit:", temp.fahrenheit);

temp.fahrenheit = 100;
console.log("Celsius after setting Fahrenheit:", temp.celsius);

Output:

Celsius: 25
Fahrenheit: 77
Celsius after setting Fahrenheit: 37.77777777777778

Program 2: Rectangle Area and Perimeter

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

  // Getter for area
  get area() {
    return this.width * this.height;
  }

  // Getter for perimeter
  get perimeter() {
    return 2 * (this.width + this.height);
  }
}

let rect = new Rectangle(10, 5);
console.log("Width:", rect.width);
console.log("Height:", rect.height);
console.log("Area:", rect.area);
console.log("Perimeter:", rect.perimeter);

Output:

Width: 10
Height: 5
Area: 50
Perimeter: 30

Program 3: Bank Account Balance

class BankAccount {
  constructor(balance) {
    this._balance = balance;
  }

  // Getter for balance
  get balance() {
    return this._balance;
  }

  // Setter for balance with validation
  set balance(amount) {
    if (amount < 0) {
      console.log("Balance cannot be negative.");
    } else {
      this._balance = amount;
    }
  }
}

let account = new BankAccount(1000);
console.log("Initial Balance:", account.balance);

account.balance = 2000;
console.log("Updated Balance:", account.balance);

account.balance = -500; // This should trigger validation

Output:

Initial Balance: 1000
Updated Balance: 2000
Balance cannot be negative.

Program 4: Inventory Management

class Inventory {
  constructor() {
    this._items = [];
  }

  // Getter for items
  get items() {
    return this._items;
  }

  // Setter for items with validation
  set items(newItems) {
    if (Array.isArray(newItems)) {
      this._items = newItems;
    } else {
      console.log("Items should be an array.");
    }
  }
}

let inventory = new Inventory();
console.log("Initial Items:", inventory.items);

inventory.items = ["item1", "item2"];
console.log("Updated Items:", inventory.items);

inventory.items = "item3"; // This should trigger validation

Output:

Initial Items: []
Updated Items: [ 'item1', 'item2' ]
Items should be an array.

Program 5: Student Grades

class Student {
  constructor(name, grades) {
    this.name = name;
    this._grades = grades;
  }

  // Getter for grades
  get grades() {
    return this._grades;
  }

  // Setter for grades with validation
  set grades(newGrades) {
    if (newGrades.every(grade => grade >= 0 && grade <= 100)) {
      this._grades = newGrades;
    } else {
      console.log("All grades should be between 0 and 100.");
    }
  }

  // Getter for average grade
  get averageGrade() {
    let sum = this._grades.reduce((acc, grade) => acc + grade, 0);
    return sum / this._grades.length;
  }
}

let student = new Student("Priya", [85, 90, 78]);
console.log("Initial Grades:", student.grades);
console.log("Average Grade:", student.averageGrade);

student.grades = [88, 92, 80];
console.log("Updated Grades:", student.grades);
console.log("New Average Grade:", student.averageGrade);

student.grades = [105, 90, 78]; // This should trigger validation

Output:

Initial Grades: [ 85, 90, 78 ]
Average Grade: 84.33333333333333
Updated Grades: [ 88, 92, 80 ]
New Average Grade: 86.66666666666667
All grades should be between 0 and 100.

Conclusion

In this chapter, you learned about JavaScript getters and setters, including how to create and use them. We also discussed the advantages of using getters and setters and provided various use cases with simple programs to demonstrate their usage. Getters and setters are powerful tools for encapsulating and validating data in your classes.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top