ارثبری به معنای ایجاد یک کلاس جدید بر اساس یک کلاس موجود است، به طوری که کلاس جدید تمام خصوصیات و متدهای کلاس اصلی (پدر) را به ارث میبرد. در جاوا اسکریپت، ارثبری اغلب با استفاده از توابع سازنده (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 یک شیء یا کلاس است که شامل متدها و خصوصیات مشترک است که میتوانند به چندین کلاس دیگر اضافه شوند.
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: راهنمای ساده و کاربردی
10م شهریور 1402
مطالعه بیشتر
آموزش کامل ویژگی background در CSS: تنظیمات پسزمینه برای طراحی وب راهنمای جامع
5م شهریور 1402
مطالعه بیشتر
آموزش اصول طراحی الگوهای برنامهنویسی (Design Patterns) در جاوا اسکریپت: راهنمای جامع با مثالها
4م آبان 1403
مطالعه بیشتر
مفاهیم پیشرفته در کلاسها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثالها
29م مهر 1403
مطالعه بیشتر
آموزش تغییر المانهای DOM: ویرایش متن، سبکها و کلاسها در جاوا اسکریپت - راهنمای کامل با مثالها
2م آبان 1403
مطالعه بیشتر
تنظیم عرض و ارتفاع عناصر در CSS: استفاده از width، height، max و min برای کنترل دقیق اندازهها
9م آبان 1403
مطالعه بیشتر
آموزش استایلدهی لیستها در CSS: طراحی و استایلدهی ul و ol
10م آبان 1403
مطالعه بیشتر
کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius
9م آبان 1403
مطالعه بیشتر
آموزش استفاده از position در CSS: نحوه موقعیتدهی عناصر در صفحات وب
9م آبان 1403
مطالعه بیشتر
آموزش مفاهیم پایهای اشیاء در جاوا اسکریپت: تعریف، ویژگیها و متدها
2م شهریور 1403
مطالعه بیشتر
آموزش اضافه کردن ویدئو و صدا به وبسایت: نحوه استفاده از تگهای video و audio در HTML
23م مرداد 1402
مطالعه بیشتر
آموزش ایجاد فرم با استفاده از HTML: طراحی فرمهای ساده و کاربردی
21م مرداد 1402
مطالعه بیشتر
تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد