پروتوتایپ ها (Object Prototypes)
«پروتوتایپ (Prototype)» مثل دفترچه مشترک خانواده است؛ شی ها از آن ویژگی و متد به ارث می برند. با این روش، کد تکراری کمتر می شود.
وراثت پروتوتایپی در جاوااسکریپت
همه شی ها از یک پروتوتایپ ارث می برند. در بالاترین سطح هم Object.prototype قرار دارد.
DateازDate.prototypeارث می برد.ArrayازArray.prototypeارث می برد.PersonازPerson.prototypeارث می برد.
سازنده شی و ساخت نمونه
«سازنده (Constructor)» تابعی است که شی های هم نوع می سازد.
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
افزودن ویژگی مستقیم به سازنده؟
با انتساب ساده به خود سازنده، ویژگی به نمونه ها اضافه نمی شود.
Person.nationality = "English";
قرار دادن ویژگی داخل سازنده
می توانی مقدار پیش فرض را در خود سازنده تعریف کنی.
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
ویژگی prototype؛ افزودن به همه نمونه ها
با Constructor.prototype ویژگی مشترک به همه نمونه ها بده.
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.nationality = "English";
افزودن متد با پروتوتایپ
متد مشترک را یک بار روی پروتوتایپ تعریف کن.
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
Person.prototype.name = function() {
return this.firstName + " " + this.lastName;
};
هشدار: فقط پروتوتایپ های «خودت» را تغییر بده. هرگز پروتوتایپ های داخلی استاندارد را دست کاری نکن.
گام های تمرینی
- یک سازنده
Studentبساز و نمونه آن را ایجاد کن. - با
Student.prototypeیک ویژگی مشترک اضافه کن. - یک متد
fullNameروی پروتوتایپ بساز و تست کن.
برای ادامه مسیر ببین: سازنده ها، this، و ساختارشکنی.
جمع بندی سریع
- پروتوتایپ وارث ویژگی و متد است.
- انتساب به سازنده کافی نیست.
- با
prototypeبه همه نمونه ها برس. - متد مشترک را روی پروتوتایپ بساز.
- پروتوتایپ های داخلی را تغییر نده.