Classes

🔹 1. تعریف یک کلاس ساده

class Person { constructor(name, age) { this.name = name; this.age = age; } sayHello() { console.log(`سلام، من ${this.name} هستم`); } } const p1 = new Person("Ali", 25); p1.sayHello(); // سلام، من Ali هستم

👉 پشت صحنه: این همون کاریه که قبلاً با constructor function + prototype انجام می‌دادیم.

🔹 2. ویژگی‌های کلاس

  • constructor → متدی که موقع new شدن صدا زده میشه.

  • methods → متدهایی که روی prototype ذخیره میشن.

  • fields (properties) → مقادیری که برای هر شیء جدید ساخته میشن.

🔹 3. وراثت (Inheritance)

کلاس‌ها می‌تونن از هم ارث‌بری کنن با extends:

class Animal { constructor(name) { this.name = name; } speak() { console.log(`${this.name} صدا درمیاره`); } } class Dog extends Animal { speak() { console.log(`${this.name} پارس می‌کنه 🐶`); } } const d = new Dog("Rex"); d.speak(); // Rex پارس می‌کنه 🐶

👉 اگر متدی در کلاس فرزند وجود نداشته باشه، از کلاس پدر میاد (Prototype Chain).

🔹 4. استفاده از super

برای صدا زدن متد یا constructor پدر:

class Student extends Person { constructor(name, age, major) { super(name, age); // صدا زدن constructor پدر this.major = major; } sayHello() { super.sayHello(); // متد پدر console.log(`رشته من ${this.major} است`); } } const s = new Student("Sara", 22, "Computer Science"); s.sayHello(); // سلام، من Sara هستم // رشته من Computer Science است

🔹 5. Getter و Setter در کلاس‌ها

class Product { constructor(name, price) { this.name = name; this._price = price; } get price() { return this._price + " تومان"; } set price(value) { if (value < 0) throw new Error("قیمت نمی‌تواند منفی باشد"); this._price = value; } } const p = new Product("Laptop", 20000); console.log(p.price); // 20000 تومان p.price = 25000; console.log(p.price); // 25000 تومان

🔹 6. متدهای استاتیک

متدهایی که به خود کلاس تعلق دارن (نه به نمونه‌ها):

class MathHelper { static add(a, b) { return a + b; } } console.log(MathHelper.add(5, 3)); // 8

🔹 7. فیلدهای خصوصی (#)

از ES2020 به بعد می‌تونیم پراپرتی‌های private داشته باشیم:

class BankAccount { #balance = 0; deposit(amount) { this.#balance += amount; } getBalance() { return this.#balance; } } const acc = new BankAccount(); acc.deposit(100); console.log(acc.getBalance()); // 100 console.log(acc.#balance); // ❌ خطا

📌 خلاصه

  • کلاس‌ها در جاوااسکریپت در واقع syntax sugar روی prototype هستن.

  • امکانات: constructor, methods, inheritance, super, getters/setters, static methods, private fields.

  • برای OOP در JS استفاده میشه و کدنویسی رو خواناتر و ساختارمندتر می‌کنه.