در جاوا اسکریپت، کلاسها و وراثت (Inheritance) ابزارهای قدرتمندی برای برنامهنویسی شیءگرا هستند که به شما این امکان را میدهند تا ساختارهای پیچیدهای از اشیاء را با استفاده از اصول شیءگرا طراحی کنید. با استفاده از کلمات کلیدی extends و super، میتوانید کلاسهای جدیدی بسازید که از کلاسهای دیگر ارثبری میکنند و ویژگیها و متدهای آنها را گسترش دهند. در این مقاله، به بررسی مفاهیم پیشرفته در کلاسها و وراثت خواهیم پرداخت.
کلاسها در جاوا اسکریپت از زمان ES6 به زبان اضافه شدهاند و به شما این امکان را میدهند که شیءها و توابع را به صورت سازمانیافتهتری مدیریت کنید. وراثت (Inheritance) یکی از اصول کلیدی برنامهنویسی شیءگرا است که به شما این امکان را میدهد که ویژگیها و رفتارهای کلاسهای موجود را به کلاسهای جدید منتقل کنید و آنها را گسترش دهید.
کلاسها در جاوا اسکریپت با استفاده از کلمه کلیدی class تعریف میشوند. یک کلاس میتواند شامل سازنده (constructor)، متدها و ویژگیها باشد.
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.
در این مثال:
کلاس Person دارای یک سازنده و یک متد greet است.
سازنده برای تنظیم خصوصیات name و age استفاده میشود.
با استفاده از کلمه کلیدی extends، میتوانید یک کلاس جدید را از کلاس موجود به ارث ببرید و ویژگیها و متدهای آن را گسترش دهید.
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // فراخوانی سازنده کلاس پایه
this.breed = breed;
}
bark() {
console.log(`${this.name} barks.`);
}
}
const myDog = new Dog('Rex', 'Golden Retriever');
myDog.speak(); // Output: Rex makes a noise.
myDog.bark(); // Output: Rex barks.
در این مثال:
کلاس Dog از کلاس Animal ارث میبرد و از ویژگیها و متدهای آن استفاده میکند.
سازنده کلاس Dog با استفاده از super(name)، سازنده کلاس پایه را فراخوانی میکند تا خصوصیت name را تنظیم کند.
متد bark به کلاس Dog اضافه شده است.
کلمه کلیدی super برای دسترسی به متدها و سازندههای کلاس پایه (پدر) از داخل کلاس فرزند (پسر) استفاده میشود.
class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
class Student extends Person {
constructor(name, studentId) {
super(name); // فراخوانی سازنده کلاس پایه
this.studentId = studentId;
}
greet() {
super.greet(); // فراخوانی متد پایه
console.log(`My student ID is ${this.studentId}.`);
}
}
const student = new Student('Ali', '12345');
student.greet();
// Output:
// Hello, my name is Ali.
// My student ID is 12345.
در این مثال:
سازنده کلاس Student از super(name) برای فراخوانی سازنده کلاس Person استفاده میکند.
متد greet در کلاس Student با استفاده از super.greet() متد پایه را فراخوانی میکند و سپس پیغام دیگری را چاپ میکند.
class Shape {
constructor(name) {
this.name = name;
}
area() {
return 0;
}
}
class Rectangle extends Shape {
constructor(name, width, height) {
super(name);
this.width = width;
this.height = height;
}
area() {
return this.width * this.height;
}
describe() {
console.log(`The area of the ${this.name} is ${super.area()}.`);
console.log(`The actual area of the ${this.name} is ${this.area()}.`);
}
}
const rectangle = new Rectangle('rectangle', 5, 10);
rectangle.describe();
// Output:
// The area of the rectangle is 0.
// The actual area of the rectangle is 50.
در این مثال:
متد describe در کلاس Rectangle از super.area() برای دسترسی به متد area کلاس پایه استفاده میکند.
جاوا اسکریپت به طور مستقیم از وراثت چندگانه (وراثت از چندین کلاس) پشتیبانی نمیکند. اما با استفاده از مفاهیم دیگر مانند میکسینها (Mixins) میتوانید ویژگیهای مشابهی را پیادهسازی کنید.
میکسینها به شما این امکان را میدهند که ویژگیها و متدها را از چندین منبع به یک کلاس اضافه کنید.
مثال: استفاده از میکسینها
const Flyer = {
fly() {
console.log(`${this.name} is flying.`);
}
};
const Swimmer = {
swim() {
console.log(`${this.name} is swimming.`);
}
};
class Superhero {
constructor(name) {
this.name = name;
}
}
// افزودن میکسینها به کلاس
Object.assign(Superhero.prototype, Flyer, Swimmer);
const hero = new Superhero('Superman');
hero.fly(); // Output: Superman is flying.
hero.swim(); // Output: Superman is swimming.
در این مثال:
دو میکسین Flyer و Swimmer تعریف شدهاند.
با استفاده از Object.assign, متدهای این میکسینها به پروتوتایپ کلاس Superhero اضافه شدهاند.
متدهای استاتیک به متدهایی اطلاق میشود که به خود کلاس تعلق دارند و نه به نمونههای آن.
class MathUtils {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathUtils.add(2, 3)); // Output: 5
console.log(MathUtils.multiply(2, 3)); // Output: 6
Getters و Setters به شما این امکان را میدهند که ویژگیهای کلاس را به صورت خصوصی و قابل کنترل نگه دارید.
class Circle {
constructor(radius) {
this._radius = radius;
}
get radius() {
return this._radius;
}
set radius(value) {
if (value > 0) {
this._radius = value;
} else {
console.log('Radius must be positive.');
}
}
get area() {
return Math.PI * this._radius * this._radius;
}
}
const circle = new Circle(5);
console.log(circle.area); // Output: 78.53981633974483
circle.radius = 10;
console.log(circle.area); // Output: 314.1592653589793
کلاسها و وراثت در جاوا اسکریپت ابزارهای قدرتمندی برای طراحی برنامههای شیءگرا هستند. با استفاده از کلمههای کلیدی extends و super, میتوانید کلاسهای جدیدی بسازید که از کلاسهای دیگر ارثبری میکنند و ویژگیها و رفتارهای آنها را گسترش دهید. درک و استفاده از این مفاهیم پیشرفته به شما این امکان را میدهد که برنامههای پیچیدهتر و مقیاسپذیرتری بنویسید و اصول شیءگرایی را به طور مؤثر پیادهسازی کنید.
نظری یافت نشد
آموزش CSS Transform و Transition: تبدیلها و ایجاد تغییرات ظاهری پویا
10م شهریور 1402
مطالعه بیشتر
آموزش جامع توابع بازگشتی (Recursion) و کاربردهای آن در جاوا اسکریپت: مثالها و مفاهیم
29م مهر 1403
مطالعه بیشتر
آموزش ارتباط با سرور و ارسال درخواستهای HTTP با Fetch API در جاوا اسکریپت: راهنمای جامع با مثالها
1م آبان 1403
مطالعه بیشتر
استفاده از visibility و opacity در CSS برای مخفیسازی عناصر: راهنمای کامل و کاربردی
11م آبان 1403
مطالعه بیشتر
چگونه یک فوتر چسبان در CSS بسازیم: آموزش ساخت فوتر ثابت و همیشگی
2م شهریور 1403
مطالعه بیشتر
مقدمهای بر Node.js و کار با جاوا اسکریپت سمت سرور: آموزش اولیه و اصولی
4م آبان 1403
مطالعه بیشتر
آموزش توسعه و مدیریت پروژههای بزرگ در جاوا اسکریپت: آشنایی با ابزارها و فریمورکهای کاربردی
4م آبان 1403
مطالعه بیشتر
مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثالها
30م مهر 1403
مطالعه بیشتر
آموزش ساخت ماشین حساب با جاوا اسکریپت: راهنمای کامل با مثالهای کاربردی
4م آبان 1403
مطالعه بیشتر
آموزش استفاده از ماژولها (Modules) در جاوا اسکریپت: آشنایی با ES6 Modules - راهنمای کامل
5م آبان 1403
مطالعه بیشتر
استفاده از Viewports و Viewport Units در CSS: طراحی واکنشگرا با vw، vh، vmin و vmax
16م آبان 1403
مطالعه بیشتر
نصب Vue.js و ایجاد پروژه ساده: آموزش گامبهگام راهاندازی Vue
28م شهریور 1402
مطالعه بیشتر
تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد