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

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

1403/07/28 21:20 محراب حسن زاده
آموزش ارث‌بری (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ها و ترکیب اشیاء به شما اجازه می‌دهد تا از قابلیت‌های چندگانه بدون نیاز به ارث‌بری مستقیم بهره‌مند شوید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش طراحی و استایل‌دهی جدول‌ها در CSS: راهنمای ساده و کاربردی
1402/06/10 18:00

آموزش طراحی و استایل‌دهی جدول‌ها در CSS: راهنمای ساده و کاربردی

مطالعه بیشتر
آموزش جامع و اصولی جستجو در دیتابیس با PHP و MySQL (مطابق استانداردهای گوگل)
1405/05/13 21:26

آموزش جامع و اصولی جستجو در دیتابیس با PHP و MySQL (مطابق استانداردهای گوگل)

مطالعه بیشتر
راهنمای جامع نصب و پیکربندی محیط توسعه محلی (XAMPP، WAMP و Laragon)
1405/03/14 23:52

راهنمای جامع نصب و پیکربندی محیط توسعه محلی (XAMPP، WAMP و Laragon)

مطالعه بیشتر
آموزش لیست‌ها در CSS: طراحی و استایل‌دهی ساده برای لیست‌های HTML
1402/06/10 17:47

آموزش لیست‌ها در CSS: طراحی و استایل‌دهی ساده برای لیست‌های HTML

مطالعه بیشتر
استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی
1403/08/11 21:37

استفاده از overflow در CSS برای مدیریت محتوای اضافی: راهنمای کامل و کاربردی

مطالعه بیشتر
مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها
1403/07/28 21:58

مدیریت خطاها و استفاده از try...catch در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مطالعه بیشتر
آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR
1405/04/16 01:07

آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR

مطالعه بیشتر
توابع فلش (Arrow Functions) در جاوا اسکریپت: ساده‌سازی کد با استفاده از ES6
1403/06/02 20:36

توابع فلش (Arrow Functions) در جاوا اسکریپت: ساده‌سازی کد با استفاده از ES6

مطالعه بیشتر
تفاوت متد GET و POST در PHP؛ راهنمای جامع و استاندارد گوگل
1405/04/27 22:13

تفاوت متد GET و POST در PHP؛ راهنمای جامع و استاندارد گوگل

مطالعه بیشتر
آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)
1405/05/14 22:03

آموزش جامع ساخت فرم ورود کاربر در PHP (براساس استانداردهای گوگل و امنیت بالا)

مطالعه بیشتر
آموزش کامل تفاوت echo و print در PHP به زبان ساده
1405/03/21 01:11

آموزش کامل تفاوت echo و print در PHP به زبان ساده

مطالعه بیشتر
راهنمای جامع معرفی PHP؛ تاریخچه، ویژگی‌ها و جایگاه آن در توسعه وب
1405/03/14 23:35

راهنمای جامع معرفی PHP؛ تاریخچه، ویژگی‌ها و جایگاه آن در توسعه وب

مطالعه بیشتر

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