class در جاوا اسکریپت

class در جاوا اسکریپت یک blueprint برای ایجاد object ها است.یک class داده ها و توابع را که اطلاعات را دستکاری می کنند ، در بر می گیرد.
بر خلاف سایر زبانهای برنامه نویسی مانند جاوا و C#، کلاسهای جاوا اسکریپت prototypal inheritance. هستند. به عبارت دیگر ، کلاس های جاوا اسکریپت فقط توابع خاصی هستند.
تا قبل از ES6 مفهومی تحت عنوان class در جاوا اسکریپت وجود نداشت.برای پیاده سازی class از constructor/prototype pattern مشابه مثال زیر استفاده می شد:
1 2 3 4 5 6 7 8 9 10 |
function Person(name) { this.name = name; } Person.prototype.getName = function () { return this.name; }; var john = new Person("John Doe"); console.log(john.getName()); |
خروجی:
1 |
John Doe |
ES6 class declaration
ES6 یک syntax جدید declaring یک class مشابه مثال زیر معرفی کرد:
1 2 3 4 5 6 7 8 |
class Person { constructor(name) { this.name = name; } getName() { return this.name; } } |
کلاس Person
مشابه Person
type در مثال قبلی رفتار می کند.با این حال، به جای استفاده از الگوی constructor/prototype از کلمه کلیدی class
استفاده می کند.
در کلاس Person
سازنده یا همان ()constructor جایی است که شما می توانید properties های یک instance را مقداردهی کنید.جاوا اسکریپت به صورت خودکار متد ()constructor را هنگام ایجاد یک object از class فراخوانی می کند.
قطعه کد زیر یک Person
object جدید ایجاد می کند که منجر به فراخوانی خودکار ()constructor کلاس Person
می شود:
1 |
let john = new Person("John Doe"); |
()getName نام یکی از متدهای کلاس Person
است.شما می توانید این متد از class را مشابه synatx زیر استفاده کنید:
1 |
objectName.methodName(args) |
برای مثال :
1 2 |
let name = john.getName(); console.log(name); // "John Doe" |
برای تایید این حقیقت که class ها در جاوا اسکریپت یک نوع خاص از تابع است، شما می توانید از typeof
برای چک کردن type کلاس Person استفاده کنید:
1 |
console.log(typeof Person); // function |
Class در مقابل Custom type
علیرغم شباهت های بین کلاس و custom type که از طریق تابع constructor تعریف می شود ، تفاوت های مهمی وجود دارد.
اولا class declarations مانند function declarations در واقع hoisted نیست.
برای مثال شما اگر قطعه کد پایین رو بالاتر از بخش تعریف کلاس Person قراردهید،با ReferenceError مواجه می شوید:
1 |
let john = new Person("John Doe"); |
خطا:
1 |
Uncaught ReferenceError: Person is not defined |
دوما،تمامی کدهای داخل class به صورت خودکار در حالت strict mode اجرا می شود.شما نمی توانید این رفتار را تغییر دهید.
سوما،فراخوانی class constructor بدون new
مشابه مثال زیر باعث ایجاد error می شود:
1 |
let john = Person("John Doe"); |
خطا:
1 |
Uncaught TypeError: Class constructor Person cannot be invoked without 'new' |
دیدگاهتان را بنویسید