
Object-Oriented Programming (OOP) is a programming paradigm that uses objects—data structures consisting of data fields and methods—to design applications and computer programs.
JavaScript is a multi-paradigm language that supports OOP principles, making it a powerful tool for building complex, scalable applications.
This tutorial will guide you through the core concepts of OOP in modern JavaScript, primarily using ES6 Classes.
1. 🧱 Objects and Classes
The fundamental concept of OOP is the Class, which acts as a blueprint for creating Objects.
A. Objects
An object is an instance of a class, representing a real-world entity. In JavaScript, you can create objects using literal notation, constructor functions, or classes.
// Object Literal Notation
const car = {
make: "Honda",
model: "Civic",
year: 2020,
start: function() {
console.log("Engine started!");
}
};
console.log(car.make); // Output: Honda
car.start(); // Output: Engine started!
B. Classes (The Blueprint)
ES6 introduced the class keyword, which provides a much cleaner and more familiar syntax for creating blueprints.
//
class Vehicle{
// 1. The constructor method is called when a new object is created.
constructor(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
// 2. A method (function) that all Vehicle objects will have
getDetails() {
return `${this.year} ${this.make} ${this.model}`;
}
}
// Creating a new object (instantiation)
const myCar = new Vehicle("Toyota", "Camry", 2022);
console.log(myCar.getDetails()); // Output: 2022 Toyota Camry
2. 🔑 The Four Pillars of OOP
OOP is built upon four main principles: Encapsulation, Abstraction, Inheritance, and Polymorphism.
A. Encapsulation (Bundling Data and Methods)
Encapsulation means bundling the data (properties) and the methods (functions) that operate on that data into a single unit (the object/class). It also involves restricting direct access to some of an object’s components, which is crucial for preventing accidental modification.
-
In JavaScript: Traditionally, JavaScript has not had true private properties. Developers use conventions, like prefixing a property with an underscore (
_), to signal that it should be treated as private. -
Modern JavaScript (ES2020+): You can now define truly private class fields using the
#prefix.
class BankAccount{
#balance = 0; // Truly private field
constructor(initialDeposit) {
if (initialDeposit > 0) {
this.#balance = initialDeposit;
}
}
deposit(amount) {
if (amount > 0) {
this.#balance += amount;
}
}
// A method (public interface) to safely retrieve the private data
getBalance() {
return this.#balance;
}
}
const account = new BankAccount(100);
account.deposit(50);
console.log(account.getBalance()); // Output: 150
// console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
B. Inheritance (The “is-a” Relationship)
Inheritance allows a new class (the subclass or child class) to inherit properties and methods from an existing class (the superclass or parent class). This promotes code reusability.
-
extends: Used to establish the inheritance relationship. -
super(): Used inside the subclass’s constructor to call the parent class’s constructor and initialize its properties.
//
class Car extends Vehicle{ // Car is a subclass of Vehicle
constructor(make, model, year, doorCount) {
// Call the parent (Vehicle) constructor
super(make, model, year);
this.doorCount = doorCount;
}
// A method specific to Car
getDoorCount() {
return `This car has ${this.doorCount} doors.`;
}
}
const sedan = new Car("Ford", "Focus", 2018, 4);
console.log(sedan.getDetails()); // Inherited from Vehicle: 2018 Ford Focus
console.log(sedan.getDoorCount()); // Own method: This car has 4 doors.
C. Polymorphism (Many Forms)
Polymorphism allows objects to take on “many forms,” meaning a single interface (a method name) can be used to represent different implementations. The most common form in JavaScript OOP is Method Overriding.
-
Method Overriding: A subclass provides its own specific implementation of a method that is already defined in its superclass.
class ElectricCar extends Car{
constructor(make, model, year, doorCount, range) {
super(make, model, year, doorCount);
this.range = range;
}
// Method Overriding: Overrides the getDetails() method from Vehicle/Car
getDetails() {
// We can call the parent's method using super
const carDetails = super.getDetails();
return `${carDetails} and has a ${this.range} mile range.`;
}
}
const tesla = new ElectricCar("Tesla", "Model 3", 2024, 4, 333);
// The getDetails() method is called, but the specific implementation
// from ElectricCar is executed.
console.log(tesla.getDetails());
// Output: 2024 Tesla Model 3 and has a 333 mile range.
D. Abstraction (Hiding Complexity)
Abstraction is the concept of showing only essential information and hiding complex implementation details.
In JavaScript:
-
Classes/Objects achieve abstraction by providing public methods (like
getBalance()orgetDetails()) that serve as a simple, high-level interface, while the internal logic (like how#balanceis updated) remains hidden. -
By using methods to interact with data (Encapsulation), you naturally implement Abstraction.
3. 📝 Summary of OOP Terms
| Term | Definition | JavaScript Example |
| Class | A blueprint for creating objects. | class Vehicle { ... } |
| Object | An instance of a class. | const myCar = new Vehicle(...) |
| Property | A piece of data (variable) associated with an object. | this.make |
| Method | A function associated with an object. | getDetails() |
| Constructor | A special method for creating and initializing an object created with a class. | constructor(...) |
Useful links below:
Let me & my team build you a money making website/blog for your business https://bit.ly/tnrwebsite_service
Get Bluehost hosting for as little as $1.99/month (save 75%)…https://bit.ly/3C1fZd2
Best email marketing automation solution on the market! http://www.aweber.com/?373860
Build high converting sales funnels with a few simple clicks of your mouse! https://bit.ly/484YV29
Join my Patreon for one-on-one coaching and help with your coding…https://www.patreon.com/c/TyronneRatcliff
Buy me a coffee https://buymeacoffee.com/tyronneratcliff




