Understanding Object-Oriented Programming in JavaScript: A Comprehensive Guide

Photo by Niels Kehl on Unsplash

Understanding Object-Oriented Programming in JavaScript: A Comprehensive Guide

JavaScript is a versatile language that supports different programming paradigms, including Object-Oriented Programming (OOP).


3 min read

OOP is a powerful programming model that helps in structuring complex programs.

In this post, we will delve into the essentials of OOP in JavaScript, covering concepts like objects, classes, inheritance, and encapsulation.

What is Object-Oriented Programming (OOP)?

Object-Oriented Programming (OOP) is a programming paradigm that uses "objects" – data structures consisting of data fields and methods together with their interactions – to design applications and programs. The four core concepts of OOP are:

  1. Encapsulation: The bundling of data and methods that act on that data.

  2. Abstraction: Hiding the complex implementation details and exposing only the essential features.

  3. Inheritance: The ability to create new classes from existing ones.

  4. Polymorphism: The ability to call the same method on different objects and each object can respond in a different way.

Objects and Classes


In JavaScript, an object is a standalone entity with properties and types. It's like a container that holds related data and methods to operate on that data. You can create an object using the object literal syntax:

let dog = {
  name: "Rover",
  color: "brown",
  bark: function() {

In the above example, name and color are properties, and bark is a method.


A class is a blueprint for creating objects with specific properties and methods. JavaScript introduced the class syntax in ES6, although it's syntactic sugar over JavaScript's existing prototype-based inheritance.

Here's an example of a class declaration:

class Dog {
  constructor(name, color) {
    this.name = name;
    this.color = color;

  bark() {

let rover = new Dog("Rover", "brown");

In the above example, Dog is a class, and rover is an instance of the Dog class. The constructor method is a special method for creating and initializing objects created within a class.


Inheritance is an important pillar of OOP. It allows you to create a new class that inherits properties and methods from an existing class. The extends keyword is used in class declarations to create a child class.

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.');

let rover = new Dog('Rover');
rover.speak(); // Rover barks.

In the above example, Dog is a subclass (or child class) of Animal. Dog inherits properties and methods from Animal, and also defines its own speak method, thus overriding the speak method from Animal.

Encapsulation and Abstraction

Encapsulation and abstraction are fundamental concepts in OOP.


Encapsulation is the practice of keeping fields within a class private, then providing access to them via public methods. It's a protective barrier that keeps the data and code safe within the object.

In JavaScript, encapsulation can be achieved using closures and symbols, but the most common way is through the use of getters (accessor) and setters (mutator) methods.

class Dog {

    let _name = name;
    this.getName = function() {
      return _name;
    this.setName = function(name) {
      _name = name;

let rover = new Dog("Rover");
console.log(rover.getName()); // Rover

console.log(rover.getName()); // Spot


Abstraction is the concept of exposing only the required essential characteristics and behavior with respect to a context. It helps to reduce programming complexity and effort. In JavaScript, abstraction can be achieved through function constructors and prototypes.


JavaScript provides powerful features that allow us to write code using the Object-Oriented Programming paradigm.

Understanding these features and concepts is key to writing robust and reusable code in JavaScript.

Remember, mastering OOP concepts requires practice.

So keep experimenting and building with these concepts in mind. Happy coding!

Did you find this article valuable?

Support 0xTristan by becoming a sponsor. Any amount is appreciated!