در حال بارگذاری...

کلاس‌های JavaScript

کلاس‌ها در JavaScript راهی منظم برای تعریف شیءهایی با سازنده و متد هستند. با new نمونه می‌سازیم و دموی این درس در پایان tea / regular / mint را نشان می‌دهد.

تعریف کلاس و سازنده

کلاس شکل و رفتار شیءها را توصیف می‌کند. سازنده هنگام ساخت نمونه با new اجرا می‌شود و فیلدهای همان نمونه را مقداردهی می‌کند.

ساخت کلاس Drink

javascript
class Drink {
constructor(name, size) {
this.name = name;
this.size = size;
}
}

const order = new Drink("tea", "regular");

سازنده name و size را می‌گیرد و روی شیء تازه ذخیره می‌کند. درون کلاس، this به نمونهٔ فعلی اشاره دارد. عبارت new Drink(...) نمونه را می‌سازد و سازنده را اجرا می‌کند.

افزودن متد نمونه

متدها کارهایی هستند که نمونه‌ها می‌توانند انجام دهند. نام و پارامترهای متد را داخل بدنهٔ کلاس می‌نویسیم.

افزودن متد label

javascript
class Drink {
constructor(name, size) {
this.name = name;
this.size = size;
}
label() {
return this.name + " / " + this.size;
}
}
const order = new Drink("tea", "regular");
console.log(order.label());

فراخوانی order.label() مقدار tea / regular را برمی‌گرداند. متدهای کلاس روی prototype قرار می‌گیرند؛ پس نمونه‌ها از یک متد مشترک استفاده می‌کنند، نه یک کپی جداگانه.

گسترش کلاس

ارث‌بری به کلاس تخصصی اجازه می‌دهد رفتار کلاس عمومی را به کار بگیرد. extends رابطه را می‌سازد، super(...) سازندهٔ والد را صدا می‌زند و super.label() متد به‌ارث‌رسیده را فراخوانی می‌کند.

ساخت نوشیدنی ویژه

javascript
class SpecialDrink extends Drink {
constructor(name, size, extra) {
super(name, size);
this.extra = extra;
}
fullLabel() {
return super.label() + " / " + this.extra;
}
}
const special = new SpecialDrink("tea", "regular", "mint");
console.log(special.fullLabel());

نمونهٔ SpecialDrink متد label() را از Drink به ارث می‌برد و extra و fullLabel() را اضافه می‌کند. خروجی tea / regular / mint است. سازندهٔ کلاس فرزند باید پیش از استفاده از this، super(...) را اجرا کند.

متدهای static و فیلد خصوصی

متد static به خود کلاس تعلق دارد، نه نمونه‌ها. فیلد خصوصی مانند #secret فقط داخل بدنهٔ همان کلاس قابل خواندن است.

فراخوانی متد static

javascript
class Drink {
static kind() {
return "drink";
}
#secret = "recipe";
reveal() {
return this.#secret;
}
}
console.log(Drink.kind());
console.log(new Drink().reveal());

متد static را با Drink.kind() صدا بزن، نه با new Drink().kind(). بیرون کلاس نمی‌توانی به drink.#secret دسترسی داشته باشی.

دیدن کلاس‌ها در یک صفحه

این دمو نمونهٔ کامل Drink و SpecialDrink را می‌سازد و نتیجه را در صفحه می‌نویسد.

اجرای دموی کلاس در مرورگر

html
<p id="result"></p>
<script>
class Drink {
constructor(name, size) { this.name = name; this.size = size; }
label() { return this.name + " / " + this.size; }
}
class SpecialDrink extends Drink {
constructor(name, size, extra) { super(name, size); this.extra = extra; }
fullLabel() { return super.label() + " / " + this.extra; }
}
const order = new SpecialDrink("tea", "regular", "mint");
document.querySelector("#result").textContent = order.fullLabel();
</script>

صفحه دقیقاً tea / regular / mint را نشان می‌دهد. اعلان کلاس پیش از محل اعلان قابل استفاده نیست؛ این وضعیت «ناحیهٔ زمانی مرده» یا temporal dead zone است، نه ادعای گمراه‌کنندهٔ hoisting.

کلاس‌ها ساخت نمونه و رفتار مشترک را سازمان می‌دهند. آن‌ها با ماژول‌ها که فایل‌ها را سازمان می‌دهند و با متدی که مستقیم روی یک شیء نوشته می‌شود فرق دارند. برای نمونه از new و برای رفتار سطح کلاس از static استفاده کن.

📊 ویژگی‌های کلاس

نحو کاربرد نمونه
constructor(...) مقداردهی نمونهٔ تازه constructor(name, size)
this اشاره به نمونهٔ فعلی this.name = name
extends و super استفادهٔ دوباره از رفتار والد class SpecialDrink extends Drink
static تعریف متد سطح کلاس Drink.kind()

این جدول نحوهای اصلی کلاس را که در این درس به کار رفتند خلاصه می‌کند.

تمرین عملی

Drink را با name، size و label() بساز. سپس با extends، کلاس SpecialDrink را بساز، extra را اضافه کن و کاری کن fullLabel() مقدار tea / regular / mint را نشان دهد. در پایان Drink.kind() را روی خود کلاس صدا بزن.

اشتباه‌های رایج

متد نمونه را روی کلاس صدا نزن، در سازندهٔ فرزند super(...) را فراموش نکن و پیش از آن از this استفاده نکن. اعلان کلاس را هم پیش از خودش به کار نبر.

نکتهٔ اصلی

کلاس‌ها داده و رفتار نمونه را کنار هم می‌گذارند: سازنده فیلدها را مقداردهی می‌کند، متدها از prototype به‌صورت مشترک استفاده می‌شوند و ارث‌بری رفتار را دوباره به کار می‌گیرد.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
6
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود