Сборка от 17 марта 2017 г



Download 9,9 Mb.
bet243/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   239   240   241   242   243   244   245   246   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Хомяки с __proto__


важность: 5

Вы – руководитель команды, которая разрабатывает игру, хомяковую ферму. Один из программистов получил задание создать класс «хомяк» (англ –


"Hamster" ).

Объекты‑хомяки должны иметь массив food для хранения еды и метод found для добавления.


Ниже – его решение. При создании двух хомяков, если поел один – почему‑то сытым становится и второй тоже. В чём дело? Как поправить?


function Hamster() {}

Hamster.prototype.food = []; // пустой "живот"


Hamster.prototype.found = function(something) { this.food.push(something);
};

// Создаём двух хомяков и кормим первого var speedy = new Hamster();


var lazy = new Hamster();

speedy.found("яблоко"); speedy.found("орех");


alert( speedy.food.length ); // 2 alert( lazy.food.length ); // 2 (!??)


К решению


Наследование классов в JavaScript


Наследование на уровне объектов в JavaScript, как мы видели, реализуется через ссылку proto .


Теперь поговорим о наследовании на уровне классов, то есть когда объекты, создаваемые, к примеру, через new Admin , должны иметь все методы, которые есть у объектов, создаваемых через new User , и ещё какие‑то свои.




Наследование Array от Object




Для реализации наследования в наших классах мы будем использовать тот же подход, который принят внутри JavaScript. Взглянем на него ещё раз на примере Array , который наследует от Object :



  • Методы массивов Array хранятся в Array.prototype .

  • Array.prototype имеет прототипом Object.prototype .

Поэтому когда экземпляры класса Array хотят получить метод массива – они берут его из своего прототипа, например Array.prototype.slice . Если же нужен метод объекта, например, hasOwnProperty , то его в Array.prototype нет, и он берётся из Object.prototype .


Отличный способ «потрогать это руками» – запустить в консоли команду console.dir([1,2,3]) . Вывод в Chrome будет примерно таким:
Здесь отчётливо видно, что сами данные и length находятся в массиве, дальше в proto идут методы для массивов concat , то есть
Array.prototype , а далее – Object.prototype .




Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   239   240   241   242   243   244   245   246   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish