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


Пример полиморфной функции



Download 9,9 Mb.
bet196/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   192   193   194   195   196   197   198   199   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Пример полиморфной функции


Пример полиморфной функции – sayHi(who) , которая будет говорить «Привет» своему аргументу, причём если передан массив – то «Привет» каждому:


function sayHi(who) {


if (Array.isArray(who)) { who.forEach(sayHi);


} else {
alert( 'Привет, ' + who );
}
}

// Вызов с примитивным аргументом sayHi("Вася"); // Привет, Вася


// Вызов с массивом


sayHi(["Саша", "Петя"]); // Привет, Саша... Петя

// Вызов с вложенными массивами ‐ тоже работает!


sayHi(["Саша", "Петя", ["Маша", "Юля"]]); // Привет Саша..Петя..Маша..Юля

Проверку на массив в этом примере можно заменить на «утиную» – нам ведь нужен только метод forEach :


function sayHi(who) {


if (who.forEach) { // если есть forEach


who.forEach(sayHi); // предполагаем, что он ведёт себя "как надо"
} else {
alert( 'Привет, ' + who );
}
}


Итого


Для написания полиморфных (это удобно!) функций нам нужна проверка типов.





  • Для примитивов с ней отлично справляется оператор typeof .

У него две особенности:





    • Он считает null объектом, это внутренняя ошибка в языке.

    • Для функций он возвращает function , по стандарту функция не считается базовым типом, но на практике это удобно и полезно.

  • Для встроенных объектов мы можем получить тип из скрытого свойства [[Class]] , при помощи вызова {}.toString.call(obj).slice(8, ‐1) . Для конструкторов, которые объявлены нами, [[Class]] всегда равно "Object" .

  • Оператор obj instanceof Func проверяет, создан ли объект obj функцией Func , работает для любых конструкторов. Более подробно мы разберём его в главе Проверка класса: "instanceof".

  • И, наконец, зачастую достаточно проверить не сам тип, а просто наличие нужных свойств или методов. Это называется «утиная типизация».

Задачи



Полиморфная функция formatDate


важность: 5

Напишите функцию formatDate(date) , которая возвращает дату в формате dd.mm.yy . Ее первый аргумент должен содержать дату в одном из видов:



  1. Как объект Date .

  2. Как строку, например yyyy‐mm‐dd или другую в стандартном формате даты.

  3. Как число секунд с 01.01.1970 .

  4. Как массив [гггг, мм, дд] , месяц начинается с нуля

Для этого вам понадобится определить тип данных аргумента и, при необходимости, преобразовать входные данные в нужный формат. Пример работы:


function formatDate(date) { /* ваш код */ }

alert( formatDate('2011‐10‐02') ); // 02.10.11 alert( formatDate(1234567890) ); // 14.02.09


alert( formatDate([2014, 0, 1]) ); // 01.01.14
alert( formatDate(new Date(2014, 0, 1)) ); // 01.01.14

Открыть песочницу с тестами для задачи.


К решению



Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   192   193   194   195   196   197   198   199   ...   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