DEV Community

Cover image for Understanding JavaScript Object Accessors
Jack Pritom Soren
Jack Pritom Soren

Posted on

Understanding JavaScript Object Accessors

JavaScript is a versatile and powerful programming language used extensively in web development. One of its key features is the ability to define objects, which can encapsulate properties and methods. Among the various ways to interact with these objects, accessors play a crucial role. This blog post will delve into the concept of JavaScript object accessors, explaining what they are, how they work, and why they are beneficial.

What Are JavaScript Object Accessors?

Accessors are methods that get or set the value of an object's property. They come in two forms: getters and setters.

  • Getters: Methods that get the value of a property.
  • Setters: Methods that set the value of a property.

These accessors provide a way to control how properties are accessed and modified. This can be useful for data validation, encapsulation, and providing computed properties.

Defining Getters and Setters

In JavaScript, you can define getters and setters within an object literal or using the Object.defineProperty method.

Using Object Literals

Here’s an example of how to define getters and setters in an object literal:

let person = {
    firstName: "John",
    lastName: "Doe",
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    },
    set fullName(name) {
        let parts = name.split(' ');
        this.firstName = parts[0];
        this.lastName = parts[1];
    }
};

console.log(person.fullName); // John Doe
person.fullName = "Jane Smith";
console.log(person.firstName); // Jane
console.log(person.lastName); // Smith
Enter fullscreen mode Exit fullscreen mode

In this example, fullName is a virtual property. It doesn’t exist in the object but is derived from firstName and lastName.

Using Object.defineProperty

Another way to define getters and setters is by using Object.defineProperty:

let person = {
    firstName: "John",
    lastName: "Doe"
};

Object.defineProperty(person, 'fullName', {
    get: function() {
        return `${this.firstName} ${this.lastName}`;
    },
    set: function(name) {
        let parts = name.split(' ');
        this.firstName = parts[0];
        this.lastName = parts[1];
    }
});

console.log(person.fullName); // John Doe
person.fullName = "Jane Smith";
console.log(person.firstName); // Jane
console.log(person.lastName); // Smith
Enter fullscreen mode Exit fullscreen mode

Here, Object.defineProperty is used to define the getter and setter for the fullName property.

Benefits of Using Accessors

Encapsulation

Accessors allow you to hide the internal representation of an object while exposing a cleaner interface. This is a fundamental principle of encapsulation in object-oriented programming.

Validation

Setters can be used to validate data before updating a property. This ensures that the object remains in a valid state.

let user = {
    _age: 0,
    get age() {
        return this._age;
    },
    set age(value) {
        if (value < 0) {
            console.log("Age cannot be negative.");
        } else {
            this._age = value;
        }
    }
};

user.age = -5; // Age cannot be negative.
user.age = 25;
console.log(user.age); // 25
Enter fullscreen mode Exit fullscreen mode

Computed Properties

Getters can be used to create properties that are calculated based on other properties. This is useful when a property is dependent on the values of other properties.

let rectangle = {
    width: 10,
    height: 5,
    get area() {
        return this.width * this.height;
    }
};

console.log(rectangle.area); // 50
Enter fullscreen mode Exit fullscreen mode

Read-Only Properties

You can create read-only properties using getters without defining a setter.

let car = {
    make: 'Toyota',
    model: 'Camry',
    get description() {
        return `${this.make} ${this.model}`;
    }
};

console.log(car.description); // Toyota Camry
car.description = 'Honda Accord'; // No effect
console.log(car.description); // Toyota Camry
Enter fullscreen mode Exit fullscreen mode

Conclusion

JavaScript object accessors are a powerful feature that enhances the way you interact with object properties. By using getters and setters, you can add encapsulation, validation, computed properties, and read-only properties to your objects. Understanding and utilizing these accessors can lead to more robust, maintainable, and cleaner code. As you continue to explore and master JavaScript, incorporating accessors into your objects will undoubtedly be a valuable tool in your programming toolkit.

Follow me on : Github Linkedin

Top comments (8)

Collapse
 
binarybitbytes profile image
BinaryBitBytes

Really neat way to depict these constructors without using a constructor function. Very cool thank you

Collapse
 
jps27cse profile image
Jack Pritom Soren

Welcome !

Collapse
 
best_codes profile image
Best Codes

Awesome post!

Collapse
 
jps27cse profile image
Jack Pritom Soren

Thank you !

Collapse
 
rexfordkode profile image
Rexford Koomson

That’s a great piece

Collapse
 
jps27cse profile image
Jack Pritom Soren

Thank you !

Collapse
 
codecruncher86 profile image
Chris Newton

Great post! Thanks for sharing.

Collapse
 
jps27cse profile image
Jack Pritom Soren

Welcome !