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

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

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

آموزش ارث‌بری (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: آموزش جامع و اصول استاندارد

کنترل زمان‌بندی و اندازه‌گیری دقیق انیمیشن‌ها در CSS: آموزش جامع و اصول استاندارد

18م شهریور 1402

مطالعه بیشتر

آموزش ایجاد تصویر و لینک در HTML: نحوه استفاده از تگ‌های img و a

آموزش ایجاد تصویر و لینک در HTML: نحوه استفاده از تگ‌های img و a

21م مرداد 1402

مطالعه بیشتر

آموزش ایجاد Transitions و انیمیشن‌های صفحه بارگذاری (Loader) در CSS: طراحی لودرهای جذاب

آموزش ایجاد Transitions و انیمیشن‌های صفحه بارگذاری (Loader) در CSS: طراحی لودرهای جذاب

16م آبان 1403

مطالعه بیشتر

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

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

18م شهریور 1402

مطالعه بیشتر

آموزش استفاده از cubic-bezier در CSS برای انیمیشن‌های سفارشی و حرفه‌ای

آموزش استفاده از cubic-bezier در CSS برای انیمیشن‌های سفارشی و حرفه‌ای

12م آبان 1403

مطالعه بیشتر

آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیره‌سازی داده‌ها در مرورگر

آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیره‌سازی داده‌ها در مرورگر

3م آبان 1403

مطالعه بیشتر

آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی

آموزش ایجاد و حذف المان‌های DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی

2م آبان 1403

مطالعه بیشتر

آموزش ساخت Toggle Switch با CSS: طراحی دکمه‌های تغییر وضعیت جذاب و واکنش‌گرا

آموزش ساخت Toggle Switch با CSS: طراحی دکمه‌های تغییر وضعیت جذاب و واکنش‌گرا

16م آبان 1403

مطالعه بیشتر

آشنایی با Inheritance در CSS: اصول وراثت و مدیریت استایل‌ها

آشنایی با Inheritance در CSS: اصول وراثت و مدیریت استایل‌ها

12م آبان 1403

مطالعه بیشتر

آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child

آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child

10م شهریور 1402

مطالعه بیشتر

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

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

20م مرداد 1402

مطالعه بیشتر

آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب

آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب

29م مرداد 1402

مطالعه بیشتر

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