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



Download 9,9 Mb.
bet344/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   341   342   343   344   345   346   347   348   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Аргументы по умолчанию


Можно прототипно унаследовать от options и добавлять/менять опции в наследнике:


function Menu(options) {


options = Object.create(options); options.width = options.width || 300;

alert( options.width ); // возьмёт width из наследника


alert( options.height ); // возьмёт height из исходного объекта
...
}

Все изменения будут происходить не в самом options , а в его наследнике, при этом исходный объект останется незатронутым.


К условию





Есть ли разница между вызовами?

Разница между вызовами Совместимость


К условию



Создать объект тем же конструктором


Да, можем, но только если уверены, что кто‑то позаботился о том, чтобы значение constructor было верным. В частности, без вмешательства в прототип код точно работает, например:


function User(name) { this.name = name;
}

var obj = new User('Вася');


var obj2 = new obj.constructor('Петя'); alert( obj2.name ); // Петя (сработало)

Сработало, так как User.prototype.constructor == User .


Но если кто‑то, к примеру, перезапишет User.prototype и забудет указать constructor , то такой фокус не пройдёт, например:


function User(name) { this.name = name;


}
User.prototype = {}; // (*)

var obj = new User('Вася');


var obj2 = new obj.constructor('Петя'); alert( obj2.name ); // undefined

Почему obj2.name равен undefined? Вот как это работает:





  1. При вызове new obj.constructor('Петя') , obj ищет у себя свойство constructor – не находит.

  2. Обращается к своему свойству proto , которое ведёт к прототипу.

  3. Прототипом будет (*), пустой объект.

  4. Далее здесь также ищется свойство constructor – его нет.

  5. Где ищем дальше? Правильно – у следующего прототипа выше, а им будет Object.prototype .

  6. Свойство Object.prototype.constructor существует, это встроенный конструктор объектов, который, вообще говоря, не предназначен для вызова с аргументом‑строкой, поэтому создаст совсем не то, что ожидается, но то же самое, что вызов new Object('Петя') , и у такого объекта не будет name .

К условию



Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   341   342   343   344   345   346   347   348   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