Prototype наследство в JavaScript
За да започнете, нека да напише нормална функция
Това ни връща към нов обект, който е инстанция на класа.
Строителите в Javacript написани с главна буква, за да лесно да ги отличават от нормалните функции.
Така че нека да си спомним с вас следните понятия. Всичко, което искаме да се опише, се нарича клас. функция, която ние наричаме оператор нова - се нарича конструктор (т.е. нашия Track е дизайнер), това, което получаваме от призив за нов - е инстанция на класа.
Да се създадат две инстанции на класове Track, които ще вземат входните параметри под формата на собственост.
Ако се извлече track01 и track02 конзолата - ще видим, че ние сме създали две празен обект.
Сега нека добавим в аргумент на конструктора Поколения назад и изхода на конзолата
Както можем да видим в конзолата - минахме параметър в конструктора и да можем да продължим да работим с тях. Тази променлива в конструктора е контекст инстанция и инстанция полета могат да obraschatsya през точка. Ето защо, ние да зададете this.name и this.url, така че те са на разположение в нашия случай.
Сега, ако ние се актуализира на страницата се вижда, че ние създаваме инстанция на писта клас с полета пълни в името и адреса.
Сега можем да се отнасяме случаи на полета, например, track01.name или track01.url.
Сега, нека да описват метод playTrack, всяка инстанция на класа може да играе.
Ако се опитаме да донесе това в рамките на playTrack метод, можем да видим, че това е копие на нашия клас.
Ние можем, например, пише this.name за показване на името на песента.
Сега, нека се обади
Както можем да видим, ние доведени до конзола
Ако ние наричаме този метод при второто трасе, получаваме
метод Alibaba клас може не само в конструктора, както току-що направено, но също и чрез прототип имота.
Ако се опитаме да тече нашия код, можем да видим, че тя работи точно по същия начин.
Каква е разликата? Единствената разлика е, че когато методът е обявен за през прототип, а не в конструктора, можем да го замени.
Ако напишете в конзолата
това ще ни доведе до функция playTrack на обект вътре.
В обектно-ориентиран, ние със сигурност се интересуват от наследство. Да си представим, че имаме нужда от един клас YoutubeTrack, която има допълнително поле на изображението и наследена от клас Track.
Ние искаме нашите дизайнер YoutubeTrack извършва всички същата логика като тази на Track само с малки промени. За да направите това, ние използваме метода се прилага. С цел да се предизвика Проектанта Track вътре YoutubeTrack запис
Какво прави той? Нанесете причини Track функция (в този случай, дизайнерът), прехвърляне контекст това, т.е. YoutubeTrack контекст и да премине всички аргументи, които ще бъдат прехвърлени към нашия YoutubeTrack.
Нека да се извлече в youtubeTrack01 конзола и youtubeTrack02
Виждаме, че всичко работи точно същото име и адреса появи като поле на обекти в конзолата, че ние zasetilis на Track Designer.
Ако zakomentiruem код Track.apply, ще видим, че ние трябва да се създаде празен обект.
Сега искаме да се добави друго поле за YoutubeTrack. Наречете го образ.
Точно когато си създадете инстанции на класа YoutubeTrack добавите изображение
Тъй като ние сега виждаме в конзолата ние екранен образ дори и в YoutubeTrack обект.
Сега искаме да видим всички методи, които са достъпни за нас в клас Track, те също са на разположение в YoutubeTrack.
Както можем да видим, в случаите на пистата имаме функция playTrack и искаме тя да бъде на разположение в YoutubeTrack.
За да направите това, ние трябва да се приложат наследство.
Ние възлага YoutubeTrack.prototype обект, който ние създаваме с Track.prototype.
Както можем да видим в конзолата, имаме метод с екземпляри playTrack YoutubeTrack
Сега ние можем лесно да причинят
и тя ще бъде написана
Но има един недостатък. Ако напишете в конзолата
ние виждаме, тук не е конструктор youtubeTrack и Track Designer. Как да го оправя?
По този начин, ние се върне линк към дизайнерската YoutubeTrack като ние трябва да. Сега, ако се вгледаме в конзолата, след това, което наричаме дясно строителя.
Както можем да видим сега, че всички случаи на класа имат метод playTrack и ако е необходимо да - ние можем да го отмени.
Сега можем да наречем метод, който ни трябва.