در 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 به شما این امکان را میدهند که به راحتی اشیاء و وراثت را مدیریت کنید. همچنین، با شبیهسازی اینترفیسها میتوانید تضمین کنید که کلاسهای شما پیادهسازی صحیحی از متدها و خصوصیات مورد نظر را دارند. با استفاده از این قابلیتها، میتوانید کدهای خود را ساختارمندتر و قابلمدیریتتر کنید.
نظری یافت نشد
مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثالها
30م مهر 1403
مطالعه بیشتر
مدیریت رویدادها در جاوا اسکریپت: اضافه و حذف Event Listeners - آموزش جامع با مثالها
2م آبان 1403
مطالعه بیشتر
آموزش مفاهیم پایهای اشیاء در جاوا اسکریپت: تعریف، ویژگیها و متدها
2م شهریور 1403
مطالعه بیشتر
نصب Node.js و Create React App: شروع پروژههای React.js بهصورت آسان
28م شهریور 1402
مطالعه بیشتر
آموزش قالببندی متن در HTML: استفاده از تگها و CSS برای استایلدهی
23م مرداد 1402
مطالعه بیشتر
آموزش ایجاد تگهای صفحهبندی در HTML و CSS: طراحی و استایلدهی pagination
29م مرداد 1402
مطالعه بیشتر
استفاده از setTimeout و setInterval در جاوا اسکریپت: آموزش کامل و مثالها
29م مهر 1403
مطالعه بیشتر
آموزش تغییر نوع و اندازه فونت و رنگ متن با CSS: استایلدهی حرفهای به متنها
5م شهریور 1402
مطالعه بیشتر
معرفی Vue.js و ویژگیهای کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی
28م شهریور 1402
مطالعه بیشتر
عملگرها و عبارات محاسباتی در جاوا اسکریپت: نحوه استفاده و کاربردهای مختلف
28م شهریور 1402
مطالعه بیشتر
مقدمهای بر CSS و نحوه اضافه کردن آن به HTML: راهنمای ساده و کامل برای مبتدیان
4م شهریور 1402
مطالعه بیشتر
آموزش لیستها در HTML: طراحی و استایلدهی لیستهای مرتب و نامرتب
20م مرداد 1402
مطالعه بیشتر
تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد