در جاوااسکریپت، دو الگوی رایج برای سازماندهی کد وجود دارد: کلاسها و ماژولها. این دو الگو میتوانند بهصورت مستقل یا ترکیبی در برنامهها استفاده شوند. شناخت هر دو الگو و کاربرد مناسب آنها برای تسلط بر JS ضروری است.
کلاسها در JS تعریفهایی برای ساختارهای دادهٔ سفارشی هستند که شامل داده و رفتار مرتبط با آن دادهاند. کلاسها خودشان مقدار اجرایی نیستند — برای استفاده باید با new نمونهسازی شوند.
class Page {
constructor(text) {
this.text = text;
}
print() {
console.log(this.text);
}
}
class Notebook {
constructor() {
this.pages = [];
}
addPage(text) {
var page = new Page(text);
this.pages.push(page);
}
print() {
for (let page of this.pages) {
page.print();
}
}
}
var mathNotes = new Notebook();
mathNotes.addPage("Arithmetic: + - * / ...");
mathNotes.addPage("Trigonometry: sin cos tan ...");
mathNotes.print();در این مثال، کلاس Page دادهای از نوع رشته دارد و متدی برای چاپ آن. کلاس Notebook مجموعهای از صفحات را نگه میدارد و متدی برای افزودن و چاپ آنها دارد.
جاوااسکریپت از وراثت کلاسها پشتیبانی میکند. کلاسهای فرزند میتوانند رفتار کلاس والد را به ارث ببرند و آن را گسترش دهند:
class Publication {
constructor(title, author, pubDate) {
this.title = title;
this.author = author;
this.pubDate = pubDate;
}
print() {
console.log(`
Title: ${this.title}
By: ${this.author}
${this.pubDate}
`);
}
}
class Book extends Publication {
constructor(details) {
super(details.title, details.author, details.publishedOn);
this.publisher = details.publisher;
this.ISBN = details.ISBN;
}
print() {
super.print();
console.log(`
Publisher: ${this.publisher}
ISBN: ${this.ISBN}
`);
}
}
class BlogPost extends Publication {
constructor(title, author, pubDate, URL) {
super(title, author, pubDate);
this.URL = URL;
}
print() {
super.print();
console.log(this.URL);
}
}در این مثال، کلاسهای Book و BlogPost از Publication ارثبری میکنند و متد print() را بازنویسی میکنند. فراخوانی super.print() باعث اجرای نسخهٔ والد متد میشود.
امکان داشتن متدهایی با نام یکسان در کلاس والد و فرزند، و اجرای نسخهٔ مناسب در زمان اجرا، ویژگیایست به نام چندریختی کلاسها و وراثت در جاوااسکریپت ابزارهایی قدرتمند برای سازماندهی داده و رفتار هستند. با استفاده از کلاسها میتوان ساختارهای منظم، قابلتوسعه و خوانا ایجاد کرد. شناخت تفاوتها و کاربردهای مناسب این الگوها، پایهای مهم برای طراحی حرفهای در JS است.
جمعبندی