سازمان‌دهی کد در جاوااسکریپت – کلاس‌ها، ماژول‌ها و وراثت شی‌گرا

در جاوااسکریپت، دو الگوی اصلی برای سازمان‌دهی داده و رفتار وجود دارد: کلاس‌ها و ماژول‌ها. این مقاله به بررسی ساختار کلاس‌ها، نحوهٔ تعریف و نمونه‌سازی آن‌ها، و مفهوم وراثت و چندریختی (polymorphism) در طراحی شی‌گرا می‌پردازد. درک این الگوها برای نوشتن کدهای منظم، قابل‌نگهداری و توسعه‌پذیر ضروری است.

کلاسماژولوراثتچندریختی

~2 min read · Updated Oct 20, 2025

مقدمه


در جاوااسکریپت، دو الگوی رایج برای سازمان‌دهی کد وجود دارد: کلاس‌ها و ماژول‌ها. این دو الگو می‌توانند به‌صورت مستقل یا ترکیبی در برنامه‌ها استفاده شوند. شناخت هر دو الگو و کاربرد مناسب آن‌ها برای تسلط بر JS ضروری است.


کلاس‌ها در جاوااسکریپت


کلاس‌ها در JS تعریف‌هایی برای ساختارهای دادهٔ سفارشی هستند که شامل داده و رفتار مرتبط با آن داده‌اند. کلاس‌ها خودشان مقدار اجرایی نیستند — برای استفاده باید با new نمونه‌سازی شوند.


class Page {
  constructor(text) {
    this.text = text;
  }
  print() {
    console.log(this.text);
  }
}

class Notebook {
  constructor() {
    this.pages = [];
  }
  addPage(text) {
    var page = new Page(text);
    this.pages.push(page);
  }
  print() {
    for (let page of this.pages) {
      page.print();
    }
  }
}

var mathNotes = new Notebook();
mathNotes.addPage("Arithmetic: + - * / ...");
mathNotes.addPage("Trigonometry: sin cos tan ...");
mathNotes.print();

در این مثال، کلاس Page داده‌ای از نوع رشته دارد و متدی برای چاپ آن. کلاس Notebook مجموعه‌ای از صفحات را نگه می‌دارد و متدی برای افزودن و چاپ آن‌ها دارد.


وراثت کلاس‌ها


جاوااسکریپت از وراثت کلاس‌ها پشتیبانی می‌کند. کلاس‌های فرزند می‌توانند رفتار کلاس والد را به ارث ببرند و آن را گسترش دهند:


class Publication {
  constructor(title, author, pubDate) {
    this.title = title;
    this.author = author;
    this.pubDate = pubDate;
  }
  print() {
    console.log(`
Title: ${this.title}
By: ${this.author}
${this.pubDate}
`);
  }
}

class Book extends Publication {
  constructor(details) {
    super(details.title, details.author, details.publishedOn);
    this.publisher = details.publisher;
    this.ISBN = details.ISBN;
  }
  print() {
    super.print();
    console.log(`
Publisher: ${this.publisher}
ISBN: ${this.ISBN}
`);
  }
}

class BlogPost extends Publication {
  constructor(title, author, pubDate, URL) {
    super(title, author, pubDate);
    this.URL = URL;
  }
  print() {
    super.print();
    console.log(this.URL);
  }
}

در این مثال، کلاس‌های Book و BlogPost از Publication ارث‌بری می‌کنند و متد print() را بازنویسی می‌کنند. فراخوانی super.print() باعث اجرای نسخهٔ والد متد می‌شود.


چندریختی (Polymorphism)


امکان داشتن متدهایی با نام یکسان در کلاس والد و فرزند، و اجرای نسخهٔ مناسب در زمان اجرا، ویژگی‌ای‌ست به نام چندریختی

جمع‌بندی


کلاس‌ها و وراثت در جاوااسکریپت ابزارهایی قدرتمند برای سازمان‌دهی داده و رفتار هستند. با استفاده از کلاس‌ها می‌توان ساختارهای منظم، قابل‌توسعه و خوانا ایجاد کرد. شناخت تفاوت‌ها و کاربردهای مناسب این الگوها، پایه‌ای مهم برای طراحی حرفه‌ای در JS است.


Written & researched by Dr. Shahin Siami

Related Articles

نحوهٔ میزبانی مستقل اپلیکیشن Next.js – پیکربندی، کشینگ، و استراتژی‌های استقرار

nextjs-self-hosting-deployment-cache-isr-proxy-env

Continue

مقایسه‌های شرطی تبدیل‌پذیر و کلاس‌های پروتوتایپی در جاوااسکریپت – درک دقیق رفتار شرطی و ساختارهای ارث‌بری

این مقاله دو موضوع مهم از ضمیمهٔ A کتاب YDKJSY را بررسی می‌کند: نحوهٔ تبدیل نوع در عبارات شرطی مانند if و while، و الگوی کلاس‌های پروتوتایپی به‌عنوان پیش‌زمینه‌ای برای کلاس‌های ES6. با مثال‌های عملی، تفاوت بین مقایسه‌های دقیق و تبدیل‌پذیر، و نحوهٔ تفویض رفتار از طریق زنجیرهٔ پروتوتایپ روشن می‌شود.

Continue

در جاوااسکریپت – تفاوت مقدار و مرجع، و فرم‌های متنوع تعریف تابع

در جاوااسکریپت – تفاوت مقدار و مرجع، و فرم‌های متنوع تعریف تابع

Continue

پروتوتایپ‌ها در جاوااسکریپت – زنجیرهٔ ارجاع، تفویض ویژگی‌ها، و نقش this در رفتار پویا

پروتوتایپ‌ها در جاوااسکریپت مکانیزمی برای ارجاع ویژگی‌ها بین اشیاء هستند. این مقاله به تعریف زنجیرهٔ پروتوتایپ، نحوهٔ تفویض ویژگی‌ها، تفاوت بین دسترسی و انتساب، و نقش کلیدی this در فراخوانی متدهای ارجاع‌شده می‌پردازد. درک این مفاهیم برای طراحی شی‌گرا و رفتارهای پویا در JS ضروری است.

Continue

Closure و this در جاوااسکریپت – حافظهٔ دامنه و زمینهٔ اجرایی در توابع

Closure و this دو مفهوم بنیادی و گاه گیج‌کننده در جاوااسکریپت هستند. این مقاله به تعریف دقیق closure به‌عنوان حافظهٔ متغیرهای بیرونی در توابع، و بررسی رفتار پویا و وابسته به نحوهٔ فراخوانی در this می‌پردازد. با مثال‌های عملی، تفاوت بین دامنهٔ ثابت و زمینهٔ اجرایی پویا روشن می‌شود.

Continue

تکرار در جاوااسکریپت – الگوی Iterator، ساختارهای قابل‌تکرار، و مصرف استاندارد داده‌ها

تکرار در جاوااسکریپت – الگوی Iterator، ساختارهای قابل‌تکرار، و مصرف استاندارد داده‌ها

Continue