ارثبری به معنای ایجاد یک کلاس جدید بر اساس یک کلاس موجود است، به طوری که کلاس جدید تمام خصوصیات و متدهای کلاس اصلی (پدر) را به ارث میبرد. در جاوا اسکریپت، ارثبری اغلب با استفاده از توابع سازنده (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: آموزش جامع و اصول استاندارد
18م شهریور 1402
مطالعه بیشتر
آموزش ایجاد تصویر و لینک در HTML: نحوه استفاده از تگهای img و a
21م مرداد 1402
مطالعه بیشتر
آموزش ایجاد Transitions و انیمیشنهای صفحه بارگذاری (Loader) در CSS: طراحی لودرهای جذاب
16م آبان 1403
مطالعه بیشتر
آموزش تکنیکهای پیشرفته CSS Grid: طراحی ساختارهای پیچیده و واکنشگرا
18م شهریور 1402
مطالعه بیشتر
آموزش استفاده از cubic-bezier در CSS برای انیمیشنهای سفارشی و حرفهای
12م آبان 1403
مطالعه بیشتر
آموزش کار با Local Storage و Session Storage در جاوا اسکریپت: ذخیرهسازی دادهها در مرورگر
3م آبان 1403
مطالعه بیشتر
آموزش ایجاد و حذف المانهای DOM به صورت داینامیک با جاوا اسکریپت: راهنمای جامع و کاربردی
2م آبان 1403
مطالعه بیشتر
آموزش ساخت Toggle Switch با CSS: طراحی دکمههای تغییر وضعیت جذاب و واکنشگرا
16م آبان 1403
مطالعه بیشتر
آشنایی با Inheritance در CSS: اصول وراثت و مدیریت استایلها
12م آبان 1403
مطالعه بیشتر
آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child
10م شهریور 1402
مطالعه بیشتر
آموزش لیستها در HTML: طراحی و استایلدهی لیستهای مرتب و نامرتب
20م مرداد 1402
مطالعه بیشتر
آموزش تگهای زمان و مکان در HTML: استفاده از time و location در صفحات وب
29م مرداد 1402
مطالعه بیشتر
تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد