ПредишенСледващото

Обикновено са необходими допълнителни случаи на инициализация на класа, така че обикновено се определя от функцията, която създава и инициализира нови обекти. Следният пример илюстрира тази функция: тя определя класът обект прототип, който представлява набор от ценности, както и "фабрика" функция, която създава и инициализира нови случаи на класа:

В този пример, има няколко интересни точки, които трябва да бъдат отбелязани отделно. фабрика гама () функция е дефинирано тук, който се използва за създаване на нови обекти варират.

Имайте предвид, че функцията на гама () определя свойствата от и към всеки от обхвата на обект. Това не са общи, не са наследили свойства определят уникалната информация за всеки отделен обект се. Накрая, имайте предвид, че всички общи, наследени методи от rangeObj използвате имоти от и до, и се отнасят към тях с помощта на тази ключова дума, което показва на обекта по отношение на които те се позовават на тези методи. Такъв метод за използване на този метод е основна характеристика на всеки клас.

конструктори

Конструкторите са наречени с помощта на нова ключова дума. Използването на новата ключова дума, когато се обаждате на строителя автоматично създава нов обект, така че проектантът може да се инициализира само свойствата на този нов обект. Важна особеност е използването на повикване конструктор свойствата на конструктор прототипи като прототип на нов обект. Това означава, че всички обекти, създадени с помощта на дизайнер, наследяват същия прототип обект и, съответно, са членове на един и същи клас.

Следващият пример показва как човек би се приложи клас Range, представена по-рано, а не чрез фабрика функция при използване на функция конструктор:

Логично е да се сравняват тези два примера в подробности и имайте предвид разликите между тези два начина за определяне на класове. На първо място, обърнете внимание, че при конвертиране фабрика във функцията дизайнер кръг () е преименуван на планина (). Това е често срещан споразумение относно регистрацията: конструктор функции в известен смисъл определят класове и имената на класовете започват с главни букви. Имената на обикновените функции и методи започват с малка буква.

Освен това имайте предвид, че Range () конструктор се нарича (в края на пример) с нова ключова дума, докато фабрика диапазон () функция се нарича без него. В първия пример, за да създадете нов обект е бил използван нормален извикване на функция, а вторият - конструктор повикване. Тъй като Range () конструктор се нарича с нова ключова дума, не е необходимо да се предизвика наследи (функция), или да предприеме всякакви други действия, за да се създаде нов обект. Новият обект се създава автоматично преди да се обадите на строителя и е на разположение в конструктора като стойността на този. Конструктор Range () може да го инициализира само.

Дизайнерите не трябва да се върнат на новосъздадения обект. изявление конструктор повикване автоматично създава нов обект, призовава строителя, като метод на обекта и се връща обект. Фактът, че призива на конструктора е толкова различна от обичайната функция разговор, е още една причина дизайнерите обикновено се дават имена като се започне с главна буква. Дизайнерите, предназначени да бъдат призовани като дизайнерите, с нова ключова дума, и обикновено, когато се обадите като нормални функции, те не са в състояние правилно да изпълняват служебните си задължения. Конвенция за именуване на дизайнери, визуални дизайнери За разлика от имената от имената на обикновените функции, помага на програмистите да не забравяйте да използвате новата ключова дума.

Друга важна разлика е в начина на именуване на прототип обект. Първият пример е прототип възрази rangeObj. Това е удобно, описателно име, но до голяма степен произволно. Вторият пример е прототип имот Range.prototype на, и това име е задължително. Expression Design Range () се нарича автоматично използва Range.prototype имот като прототип на нов Range обект.

И накрая, да се обърне внимание и на едни и същи фрагменти от примери - и в двата класа методи гама обект се определят и се наричат ​​по същия начин.

Имотът на конструктор

Във втория пример Range.prototype имот определен нов обект клас съдържащ методи. Въпреки, че е подходящо да се определят методите за свойствата на един обект буквално, но това в никакъв случай не е необходимо да се създаде нов обект.

Наличието на предварително определен прототип обект с конструктор собственост означава, че обекти обикновено наследяват конструктор имот, който се отнася до техните дизайнери. Тъй като дизайнерите играят ролята на документи за самоличност класа, конструктор собственост определя класа на обекта:

Тези взаимоотношения между функция конструктор, неговата прототип, обратната връзка от референтния прототип строителя и копия създаден с помощта на конструктора са илюстрирани със следната диаграма:

Javascript, класи

Имайте предвид, че като пример за нашия дизайнер Range е взето за тази диаграма (). В действителност обаче Range клас замества определени предварително обект Range.prototype собствени. Новият прототип обект не разполага с имущество конструктор. Поради тази причина, копия на Range клас, както следва от определението, не са конструктор собственост. За да реши този проблем, трябва изрично да добавите конструктор в прототипа:

Друг често срещан начин е да се използва предварително определен прототип обект, който вече има конструктор собственост, и добавете методи за него:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!