در ECMAScript 6 (ES6)، قابلیتهای جدیدی برای برنامهنویسی شیءگرا به جاوا اسکریپت اضافه شد که شامل کلاسها (Classes) و اینترفیسها (Interfaces) میشود. این ویژگیها به توسعهدهندگان کمک میکنند تا کدهای خود را ساختارمندتر، قابلفهمتر و قابلمدیریتتر بنویسند. در این مقاله، به بررسی مفاهیم کلاسها و اینترفیسها در ES6 میپردازیم و نحوه استفاده از آنها را توضیح میدهیم.
کلاسها در ES6 به عنوان یک راه جدید و ساده برای تعریف شیءها و وراثت در جاوا اسکریپت معرفی شدند. کلاسها به توسعهدهندگان این امکان را میدهند که به صورت واضحتر و سازمانیافتهتر از اصول شیءگرا استفاده کنند.
برای تعریف یک کلاس در ES6 از کلمهکلیدی class استفاده میکنیم. ساختار کلی تعریف کلاس به صورت زیر است:
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.
در این مثال:
class Person برای تعریف کلاس Person استفاده میشود.
constructor یک متد خاص است که برای مقداردهی اولیه به خصوصیات شیء استفاده میشود.
متد greet یک متد عمومی است که میتوان از آن در نمونههای کلاس استفاده کرد.
کلاسها در ES6 به راحتی از کلاسهای دیگر ارث میبرند. برای این کار از کلمهکلیدی extends استفاده میکنیم.
class Student extends Person {
constructor(name, age, grade) {
super(name, age); // فراخوانی سازنده کلاس پدر
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.
در این مثال:
Student کلاس جدیدی است که از Person ارث میبرد.
super(name, age) برای فراخوانی سازنده کلاس پدر و مقداردهی به خصوصیات آن استفاده میشود.
study متدی است که به طور خاص برای کلاس Student تعریف شده است.
کلاسها در ES6 از متدهای استاتیک و خصوصی نیز پشتیبانی میکنند.
متدهای استاتیک:
class MathUtils {
static add(x, y) {
return x + y;
}
}
console.log(MathUtils.add(2, 3)); // Output: 5
متدهای خصوصی:
class Person {
#socialSecurityNumber;
constructor(name, socialSecurityNumber) {
this.name = name;
this.#socialSecurityNumber = socialSecurityNumber;
}
getSocialSecurityNumber() {
return this.#socialSecurityNumber;
}
}
const ali = new Person('Ali', '123-45-6789');
console.log(ali.getSocialSecurityNumber()); // Output: 123-45-6789
// console.log(ali.#socialSecurityNumber); // SyntaxError: Private field '#socialSecurityNumber' must be declared in an enclosing class
در این مثال، #socialSecurityNumber یک متغیر خصوصی است که فقط از داخل کلاس قابل دسترسی است.
در حالی که جاوا اسکریپت به طور مستقیم از اینترفیسها پشتیبانی نمیکند، میتوانیم مفهوم اینترفیسها را با استفاده از کلاسها و قراردادهای طراحی شبیهسازی کنیم. اینترفیسها به طور کلی مجموعهای از متدها و خصوصیات هستند که یک کلاس باید پیادهسازی کند.
برای شبیهسازی اینترفیسها در جاوا اسکریپت، میتوانیم از کلاسهای انتزاعی (Abstract Classes) و الگوهای طراحی استفاده کنیم.
ایجاد یک "اینترفیس" و پیادهسازی آن در کلاسها:
class Drawable {
draw() {
throw new Error("Method 'draw()' must be implemented.");
}
}
class Circle extends Drawable {
constructor(radius) {
super();
this.radius = radius;
}
draw() {
console.log(`Drawing a circle with radius ${this.radius}`);
}
}
const circle = new Circle(5);
circle.draw(); // Output: Drawing a circle with radius 5
در این مثال:
Drawable یک کلاس انتزاعی است که به عنوان یک "اینترفیس" عمل میکند. متد draw باید توسط هر کلاسی که از Drawable ارث میبرد پیادهسازی شود.
Circle از Drawable ارث میبرد و متد draw را پیادهسازی میکند.
برای اطمینان از پیادهسازی صحیح اینترفیسها، میتوانیم از بررسیهای دستی استفاده کنیم.
function checkInterfaceImplementation(obj, interface) {
const methods = Object.getOwnPropertyNames(interface.prototype);
methods.forEach(method => {
if (typeof obj[method] !== 'function') {
throw new Error(`Class does not implement ${method} method from the interface.`);
}
});
}
class Circle extends Drawable {
constructor(radius) {
super();
this.radius = radius;
}
draw() {
console.log(`Drawing a circle with radius ${this.radius}`);
}
}
const circle = new Circle(5);
checkInterfaceImplementation(circle, Drawable); // No error if all methods are implemented
در این مثال:
تابع checkInterfaceImplementation بررسی میکند که آیا تمامی متدهای لازم در کلاس پیادهسازی شدهاند یا خیر.
کلاسها و اینترفیسها (شبیهسازی شده) در ES6 جاوا اسکریپت ابزارهای قدرتمندی برای طراحی و پیادهسازی برنامههای شیءگرا هستند. کلاسها با استفاده از کلمهکلیدی class به شما این امکان را میدهند که به راحتی اشیاء و وراثت را مدیریت کنید. همچنین، با شبیهسازی اینترفیسها میتوانید تضمین کنید که کلاسهای شما پیادهسازی صحیحی از متدها و خصوصیات مورد نظر را دارند. با استفاده از این قابلیتها، میتوانید کدهای خود را ساختارمندتر و قابلمدیریتتر کنید.
نظری یافت نشد
استفاده از clip-path در CSS برای برشهای زیبا و جذاب: راهنمای کامل
16م آبان 1403
مطالعه بیشتر
آموزش جامع حلقههای for و while در جاوا اسکریپت: نحوه استفاده و کاربردها
2م بهمن 1402
مطالعه بیشتر
پارامترها و بازگشت از توابع در جاوا اسکریپت: نحوه تعریف و مدیریت خروجیها
2م بهمن 1402
مطالعه بیشتر
آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child
10م شهریور 1402
مطالعه بیشتر
آموزش استفاده از جدول در HTML: طراحی و استایلدهی جدولهای ساده و پیشرفته
21م مرداد 1402
مطالعه بیشتر
آموزش ارثبری (Inheritance) در جاوا اسکریپت: نحوه استفاده از پروتوتایپها و کلاسها
28م مهر 1403
مطالعه بیشتر
آشنایی با انواع انتخابگرها و تغییر پسزمینه با CSS: راهنمای جامع
4م شهریور 1402
مطالعه بیشتر
آموزش ایجاد Transitions و انیمیشنهای صفحه بارگذاری (Loader) در CSS: طراحی لودرهای جذاب
16م آبان 1403
مطالعه بیشتر
آموزش ایجاد یک پروژه ساده React: شروع کار و ساختاردهی کامپوننتها
28م شهریور 1402
مطالعه بیشتر
مدیریت ترتیب نمایش با z-index در CSS: آموزش کامل و کاربردی
11م آبان 1403
مطالعه بیشتر
الگوهای رایج برنامهنویسی ناهمگام در جاوا اسکریپت: Promise.race، Promise.all، و Promise.any کامل و مثالها
1م آبان 1403
مطالعه بیشتر
مقدمهای بر Node.js و کار با جاوا اسکریپت سمت سرور: آموزش اولیه و اصولی
4م آبان 1403
مطالعه بیشتر
تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد