Static Methods

متدهای static متعلق به خود کلاس هستن، نه نمونه‌های ساخته‌شده از کلاس.
یعنی بدون اینکه از کلاس new بگیریم، می‌تونیم مستقیماً از اون‌ها استفاده کنیم.

1️⃣ تعریف متد static

class MathHelper { static add(a, b) { return a + b; } static multiply(a, b) { return a * b; } } console.log(MathHelper.add(5, 3)); // 8 console.log(MathHelper.multiply(4, 2)); // 8 const obj = new MathHelper(); // obj.add(5,3) ❌ خطا: متد static روی نمونه قابل دسترسی نیست

👉 متدهای static معمولاً برای توابع ابزاری (utility) استفاده میشن.

2️⃣ ترکیب با متدهای معمولی

class Person { constructor(name) { this.name = name; } sayHello() { console.log(`سلام، من ${this.name} هستم`); } static info() { console.log("این کلاس مربوط به افراد است"); } } const p = new Person("Ali"); p.sayHello(); // سلام، من Ali هستم Person.info(); // این کلاس مربوط به افراد است

3️⃣ وراثت و متدهای static

متدهای static به کلاس‌های فرزند هم به ارث می‌رسن:

class Animal { static category() { return "حیوان"; } } class Dog extends Animal {} console.log(Dog.category()); // حیوان

4️⃣ استفاده‌ی متد static داخل کلاس

متد static می‌تونه متدهای static دیگه رو صدا بزنه:

class Calculator { static add(a, b) { return a + b; } static square(n) { return n * n; } static sumOfSquares(a, b) { return this.square(a) + this.square(b); } } console.log(Calculator.sumOfSquares(2, 3)); // 13

5️⃣ کاربردهای رایج

  • متدهای Utility/Helper (مثل Math در جاوااسکریپت)

  • ساخت Factory methods (برای تولید نمونه‌ها)

  • کار با داده‌های مشترک در سطح کلاس

مثال Factory Method:

class User { constructor(name) { this.name = name; } static createGuest() { return new User("Guest"); } } const guest = User.createGuest(); console.log(guest.name); // Guest

📌 خلاصه

  • متدهای static به نمونه‌ها تعلق ندارن → فقط روی کلاس صدا زده میشن.

  • برای توابع ابزاری، Factory methods و داده‌های عمومی استفاده میشن.

  • به کلاس‌های فرزند به ارث می‌رسن.

  • می‌تونن متدهای static دیگه رو صدا بزنن.