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

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

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

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

21م مرداد 1402

مطالعه بیشتر

آموزش جامع حلقه‌های for و while در جاوا اسکریپت: نحوه استفاده و کاربردها

آموزش جامع حلقه‌های for و while در جاوا اسکریپت: نحوه استفاده و کاربردها

2م بهمن 1402

مطالعه بیشتر

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

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

7م شهریور 1402

مطالعه بیشتر

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

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

10م شهریور 1402

مطالعه بیشتر

آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع

آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع

5م شهریور 1402

مطالعه بیشتر

Async/Await: نوشتن کدهای خواناتر و ناهم‌زمان در جاوا اسکریپت - آموزش کامل با مثال‌ها

Async/Await: نوشتن کدهای خواناتر و ناهم‌زمان در جاوا اسکریپت - آموزش کامل با مثال‌ها

30م مهر 1403

مطالعه بیشتر

آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها

آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها

2م آبان 1403

مطالعه بیشتر

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of

4م مهر 1403

مطالعه بیشتر

آموزش اضافه کردن ویدئو و صدا به وب‌سایت: نحوه استفاده از تگ‌های video و audio در HTML

آموزش اضافه کردن ویدئو و صدا به وب‌سایت: نحوه استفاده از تگ‌های video و audio در HTML

23م مرداد 1402

مطالعه بیشتر

آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننت‌ها

آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننت‌ها

28م شهریور 1402

مطالعه بیشتر

آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش

آموزش کامل کار با آرایه‌ها و اشیاء در جاوا اسکریپت: ایجاد، دستکاری و پیمایش

2م شهریور 1403

مطالعه بیشتر

آموزش کامل توابع سازنده (Constructors) و پروتوتایپ‌ها (Prototypes) در جاوا اسکریپت: راهنمای جامع

آموزش کامل توابع سازنده (Constructors) و پروتوتایپ‌ها (Prototypes) در جاوا اسکریپت: راهنمای جامع

28م مهر 1403

مطالعه بیشتر

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