آموزش رایگان جاوا اسکریپت (JavaScript)

آموزش ارث‌بری (Inheritance) در جاوا اسکریپت: نحوه استفاده از پروتوتایپ‌ها و کلاس‌ها

28م مهر 1403 محراب حسن زاده
آموزش ارث‌بری (Inheritance) در جاوا اسکریپت: نحوه استفاده از پروتوتایپ‌ها و کلاس‌ها

ارث‌بری به معنای ایجاد یک کلاس جدید بر اساس یک کلاس موجود است، به طوری که کلاس جدید تمام خصوصیات و متدهای کلاس اصلی (پدر) را به ارث می‌برد. در جاوا اسکریپت، ارث‌بری اغلب با استفاده از توابع سازنده (Constructor Functions) و یا کلاس‌ها (Classes) انجام می‌شود.

جاوا اسکریپت از یک مدل شیءگرا بر پایه پروتوتایپ (Prototype-based) استفاده می‌کند که به شما اجازه می‌دهد تا شیء جدیدی ایجاد کنید که به یک شیء موجود (پروتوتایپ) متصل است. این مدل به شما امکان می‌دهد تا متدها و خصوصیات را بین اشیاء به اشتراک بگذارید.

 

ایجاد ارث‌بری با استفاده از پروتوتایپ‌ها

معرفی پروتوتایپ‌ها

پروتوتایپ‌ها در جاوا اسکریپت به عنوان قالب (Template) برای اشیاء عمل می‌کنند. هر شیء در جاوا اسکریپت یک پروتوتایپ دارد که می‌تواند متدها و خصوصیات را از آن به ارث ببرد.

 

ایجاد شیء با استفاده از پروتوتایپ

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


function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

const ali = new Person('Ali', 30);
ali.greet(); // Output: Hello, my name is Ali and I am 30 years old.

 

در این مثال، Person یک تابع سازنده است که دو خصوصیت name و age را تنظیم می‌کند. سپس، یک متد greet به پروتوتایپ Person اضافه می‌کنیم که پیامی را چاپ می‌کند. هنگامی که یک نمونه جدید از Person ایجاد می‌کنیم، این نمونه به متد greet دسترسی دارد.

 

ارث‌بری با استفاده از پروتوتایپ

اکنون بیایید یک تابع سازنده دیگر به نام Student ایجاد کنیم که از Person ارث می‌برد.


function Student(name, age, grade) {
  Person.call(this, name, age); // فراخوانی سازنده Person
  this.grade = grade;
}

// تنظیم پروتوتایپ Student برای ارث‌بری از Person
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

Student.prototype.study = function() {
  console.log(`${this.name} is studying in grade ${this.grade}.`);
};

const sara = new Student('Sara', 20, '12th');
sara.greet(); // Output: Hello, my name is Sara and I am 20 years old.
sara.study(); // Output: Sara is studying in grade 12th.

 

در این مثال:

  • تابع Student سازنده‌ی جدیدی است که به جز name و age یک خصوصیت grade نیز دارد.

  • با استفاده از Person.call(this, name, age) خصوصیات name و age را از Person به Student منتقل می‌کنیم.

  • پروتوتایپ Student را با Object.create(Person.prototype) به پروتوتایپ Person متصل می‌کنیم، که این باعث می‌شود Student از متدهای Person ارث ببرد.

  • متد constructor پروتوتایپ Student را به Student تنظیم می‌کنیم تا مرجع صحیحی به تابع سازنده آن باشد.

  • متد study را به Student.prototype اضافه می‌کنیم که تنها برای نمونه‌های Student در دسترس است.

 

استفاده از کلاس‌ها برای ارث‌بری

در ES6، کلاس‌ها (Classes) به جاوا اسکریپت معرفی شدند که کار با ارث‌بری و ایجاد اشیاء را ساده‌تر می‌کنند. بیایید همان مثال قبلی را با استفاده از کلاس‌ها بازنویسی کنیم.

 

عریف کلاس‌ها

ایجاد کلاس Person با استفاده از کلاس‌ها:


class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

const ali = new Person('Ali', 30);
ali.greet(); // Output: Hello, my name is Ali and I am 30 years old.

 

ارث‌بری با استفاده از کلاس‌ها

ایجاد کلاس Student که از Person ارث می‌برد:


class Student extends Person {
  constructor(name, age, grade) {
    super(name, age); // فراخوانی سازنده کلاس پدر (Person)
    this.grade = grade;
  }

  study() {
    console.log(`${this.name} is studying in grade ${this.grade}.`);
  }
}

const sara = new Student('Sara', 20, '12th');
sara.greet(); // Output: Hello, my name is Sara and I am 20 years old.
sara.study(); // Output: Sara is studying in grade 12th.

 

در این مثال:

  • کلمه کلیدی extends نشان می‌دهد که Student از Person ارث می‌برد.

  • کلمه کلیدی super برای فراخوانی سازنده کلاس پدر (Person) استفاده می‌شود و اجازه می‌دهد که name و age از طریق سازنده Person مقداردهی شوند.

  • Student همچنان متد study خود را دارد که فقط برای نمونه‌های Student تعریف شده است.

 

ارث‌بری چندگانه و ترکیب اشیاء

جاوا اسکریپت به طور مستقیم ارث‌بری چندگانه (Multiple Inheritance) را پشتیبانی نمی‌کند (جایی که یک کلاس می‌تواند از بیش از یک کلاس ارث ببرد). با این حال، می‌توان از ترکیب (Composition) و الگوهایی مانند Mixinها برای دستیابی به این مفهوم استفاده کرد.

 

Mixinها در جاوا اسکریپت

Mixin یک شیء یا کلاس است که شامل متدها و خصوصیات مشترک است که می‌توانند به چندین کلاس دیگر اضافه شوند.


const canEat = {
  eat() {
    console.log(`${this.name} is eating.`);
  }
};

const canWalk = {
  walk() {
    console.log(`${this.name} is walking.`);
  }
};

class Person {
  constructor(name) {
    this.name = name;
  }
}

// ادغام قابلیت‌ها با استفاده از Object.assign
Object.assign(Person.prototype, canEat, canWalk);

const ali = new Person('Ali');
ali.eat();  // Output: Ali is eating.
ali.walk(); // Output: Ali is walking.

 

نتیجه‌گیری

ارث‌بری در جاوا اسکریپت یک ابزار قدرتمند برای ایجاد کدهای قابل استفاده مجدد و قابل گسترش است. با استفاده از پروتوتایپ‌ها و کلاس‌ها، می‌توانید ساختارهای پیچیده‌ای ایجاد کنید که رفتار مشترکی را به اشتراک می‌گذارند. درک ارث‌بری و نحوه استفاده از آن به شما کمک می‌کند تا کدهای موثرتری بنویسید و از تکرار کد جلوگیری کنید. همچنین، استفاده از Mixinها و ترکیب اشیاء به شما اجازه می‌دهد تا از قابلیت‌های چندگانه بدون نیاز به ارث‌بری مستقیم بهره‌مند شوید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آشنایی با متغیرها در PHP به زبان ساده (راهنمای جامع)
21م خرداد 1405

آشنایی با متغیرها در PHP به زبان ساده (راهنمای جامع)

مطالعه بیشتر
مقدمه‌ای به template و دیتابایندینگ در Vue.js: نحوه مدیریت داده‌ها و رندرینگ پویا
28م شهریور 1402

مقدمه‌ای به template و دیتابایندینگ در Vue.js: نحوه مدیریت داده‌ها و رندرینگ پویا

مطالعه بیشتر
راهنمای کامل جداول HTML: آموزش ساخت و بهینه‌سازی سئو
21م مرداد 1402

راهنمای کامل جداول HTML: آموزش ساخت و بهینه‌سازی سئو

مطالعه بیشتر
آموزش تکنیک‌های پیشرفته CSS Grid: طراحی ساختارهای پیچیده و واکنش‌گرا
18م شهریور 1402

آموزش تکنیک‌های پیشرفته CSS Grid: طراحی ساختارهای پیچیده و واکنش‌گرا

مطالعه بیشتر
آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر
2م بهمن 1402

آموزش جامع توابع در جاوا اسکریپت: نحوه تعریف، فراخوانی و بازگشت مقادیر

مطالعه بیشتر
آموزش ساخت افکت تصویر با تم اینستاگرام و انیمیشن چرخش دوره‌ای در CSS
13م خرداد 1405

آموزش ساخت افکت تصویر با تم اینستاگرام و انیمیشن چرخش دوره‌ای در CSS

مطالعه بیشتر
جمع‌بندی، مرور مطالب و پروژه نهایی: ایجاد یک اپلیکیشن وب کامل با جاوا اسکریپت - راهنمای گام به گام
5م آبان 1403

جمع‌بندی، مرور مطالب و پروژه نهایی: ایجاد یک اپلیکیشن وب کامل با جاوا اسکریپت - راهنمای گام به گام

مطالعه بیشتر
نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue
28م شهریور 1402

نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue

مطالعه بیشتر
تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازه‌ها
9م آبان 1403

تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازه‌ها

مطالعه بیشتر
راهنمای کامل تگ‌های <img> و <a> در HTML: تصاویر و لینک‌ها
21م مرداد 1402

راهنمای کامل تگ‌های <img> و <a> در HTML: تصاویر و لینک‌ها

مطالعه بیشتر
آموزش ساخت یک گالری تصویر با استفاده از جاوا اسکریپت: راهنمای گام به گام
3م آبان 1403

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

مطالعه بیشتر
آموزش قالب‌بندی متن در HTML: استفاده از تگ‌ها و CSS برای استایل‌دهی
23م مرداد 1402

آموزش قالب‌بندی متن در HTML: استفاده از تگ‌ها و CSS برای استایل‌دهی

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد