36- آموزش جاوااسکریپت | آموزش ساخت شیء با Object.create
در این آموزش با روش ساخت اشیاء با استفاده از Object.create در جاوااسکریپت آشنا میشویم. همچنین یاد میگیریم چگونه متدهای مشترک را در یک شیء پروتوتایپی تعریف کنیم، ویژگیهای جدید به اشیاء اضافه کنیم و از دو شیوه مختلف برای مقداردهی اولیه استفاده کنیم.
در جاوااسکریپت، علاوه بر تابع سازنده (Constructor)، روش دیگری هم برای ساخت اشیاء وجود دارد که از متد Object.create استفاده میکند. این روش به ما اجازه میدهد یک شیء پایه شامل متدهای مشترک تعریف کنیم و سپس اشیاء جدیدی بسازیم که این متدها را از آن به ارث ببرند.
این الگو برای درک بهتر پروتوتایپها بسیار کاربردی است، چون بدون استفاده از Constructor نیز میتوان رفتارهای مشترک را بین چند شیء به اشتراک گذاشت.
تعریف شیء پروتوتایپی
ابتدا یک شیء به نام personPrototypes میسازیم و متدهای مشترک را داخل آن قرار میدهیم. در این مثال، متد greeting برای نمایش نام کامل شخص استفاده میشود.
const personPrototypes = {
greeting: function() {
return `Hello there ${this.firstName} ${this.lastName}`;
}
};
ساخت شیء با Object.create
اکنون میتوانیم یک شیء جدید بر اساس این پروتوتایپ بسازیم. در این روش، ابتدا شیء ایجاد میشود و سپس ویژگیهای آن را بهصورت جداگانه مقداردهی میکنیم.
const mary = Object.create(personPrototypes);
mary.firstName = 'Mary';
mary.lastName = 'Williams';
mary.age = 30;
در این حالت، شیء mary به متدهای تعریفشده در personPrototypes دسترسی دارد:
console.log(mary.greeting());
// Hello there Mary Williams
افزودن متد جدید به پروتوتایپ
میتوانیم متدهای بیشتری به شیء پروتوتایپی اضافه کنیم. برای مثال، متدی به نام getsMarried تعریف میکنیم تا نام خانوادگی شیء را تغییر دهد.
const personPrototypes = {
greeting: function() {
return `Hello there ${this.firstName} ${this.lastName}`;
},
getsMarried: function(newLastName) {
this.lastName = newLastName;
}
};
حالا اگر این متد را روی mary اجرا کنیم، مقدار lastName تغییر میکند:
mary.getsMarried('Thompson');
console.log(mary.greeting());
// Hello there Mary Thompson
روش دوم مقداردهی با پارامتر دوم Object.create
Object.create یک روش دیگر هم برای ساخت شیء در اختیار ما میگذارد. در این روش، علاوه بر پروتوتایپ، یک شیء دوم نیز بهعنوان پارامتر ارسال میکنیم که ویژگیهای اولیه را مشخص میکند.
const matin = Object.create(personPrototypes, {
firstName: { value: 'Matin' },
lastName: { value: 'Molkara' },
age: { value: 36 }
});
اکنون شیء matin هم به ویژگیهای خودش دسترسی دارد و هم متدهای موجود در پروتوتایپ را به ارث میبرد:
console.log(matin.greeting());
// Hello there Matin Molkara
تفاوت این روش با Constructor
استفاده از Object.create راهی ساده و مستقیم برای ساخت اشیاء بر پایه پروتوتایپ است. در این روش:
- نیازی به تعریف تابع سازنده نداریم.
- متدهای مشترک را در یک شیء پایه قرار میدهیم.
- اشیاء جدید مستقیماً از آن شیء ارثبری میکنند.
این روش برای یادگیری ساختار پروتوتایپها بسیار مفید است، هرچند در پروژههای مدرن معمولاً از class در ES6 بیشتر استفاده میشود، چون خوانایی و نگهداری کد را سادهتر میکند.
جمعبندی
متد Object.create یکی از روشهای مهم ساخت شیء در جاوااسکریپت است. با این روش میتوان یک شیء پایه شامل متدهای مشترک ساخت و اشیاء دیگر را بر اساس آن ایجاد کرد. همچنین میتوان ویژگیها را هم بعد از ساخت شیء و هم هنگام ایجاد آن مقداردهی کرد. این الگو درک عمیقتری از نحوه کار پروتوتایپها در جاوااسکریپت به شما میدهد.