Утка набирает в JavaScript

  1. Вебинар: По запросу, по требованию Настольный компьютер как услуга, разработанный для любого облака?...
  2. Эмуляция интерфейсов с Duck Typing
  3. Защита от самозванцев
  4. Заключение

Вебинар:
По запросу, по требованию

Настольный компьютер как услуга, разработанный для любого облака? Рамка Нутаникс


в Обезьяна Ямочный В статье я ввел термин «Duck Typing». Duck Typing, созданный Ruby-программистами, основан на принципе: «Если он ходит как утка и крякает как утка, значит, это утка». Следуя этому принципу, вместо того, чтобы пытаться определить пригодность объекта для данной цели в соответствии с его типом, при типизации утки пригодность объекта определяется наличием определенных методов и свойств. Когда вы ознакомитесь с этой концепцией, вы начнете замечать, где Duck Typing использовался во многих языках программирования, включая JavaScript, с большим успехом. В сегодняшней статье мы проследим его эволюцию в JavaScript и рассмотрим некоторые ситуации, в которых мы можем применять Duck Typing для наших собственных целей.

Утка набирает корни в JavaScript

Когда-то авторы сценариев использовали технику, называемую «Обнюхивание обозревателя», то есть анализ пользовательского агента, чтобы определить, следует ли кодировать в JavaScript (Netscape) или JScript (Internet Explorer). Со временем эту практику затмил Обнаружение функций, в результате чего была выбрана конкретная функция / возможность. Например:

// Обнаружение браузера if (navigator.userAgent.indexOf ("MSIE 7")> -1) {// сделать что-то} // Обнаружение функции if (document.all) {// сделать что-то}

Обнаружение функций стало заметным улучшением по сравнению с анализатором браузера, но, к сожалению, многие веб-разработчики пошли еще дальше, используя тест document.all в качестве неявной проверки для Internet Explorer. Предполагая, что браузер на самом деле является IE, кодировщики затем будут исходить из ошибочного предположения о том, что было также безопасно использовать другие специфичные для IE методы и свойства, такие как свойство document.uniqueID. В Duck Typing нельзя было бы делать такие предположения на основе какого-либо конкретного теста.

Позже, несколько шайба библиотеки были разработаны для стандартизированного определения функций HTML5 и CSS3 в различных браузерах. Наиболее известным из них является Modernizr. Модернизр, созданный несколькими разработчиками, включая Пола Айриша, получил несколько наград. Он создает глобальный объект Modernizr, который содержит набор логических свойств для каждой функции, которую он может обнаружить. Например, если браузер поддерживает API Canvas, для свойства Modernizr.canvas будет установлено значение true , иначе - false :

if (Modernizr.canvas) {// давайте нарисуем несколько фигур ...! } else {// нет собственной поддержки canvas :(}

В отличие от более раннего обнаружения функций для браузеров, такие шайбы, как Modernizr, ограничивают проверки своих функций отдельными свойствами.

Эмуляция интерфейсов с Duck Typing

Интерфейсы являются одной из самых мощных функций языков программирования, таких как Java. Это файл, который содержит коллекцию сигнатур функций. Когда объект реализует интерфейс, он символически подписывает контракт, в соответствии с которым он соглашается выполнять определенные действия (функции) интерфейса. Если объект не соответствует своей стороне сделки, ваша программа даже не скомпилируется!

Хотя JavaScript не является объектно-ориентированным языком, как Java (он использует прототипное наследование), есть способы эмулировать интерфейсоподобные функции. Посмотрим как.

Для нашей демонстрации давайте создадим три типа автомобилей:

функция Infiniti (модель) {this.model = модель; } функция Honda (модель) {this.model = model; } function Hyundai (model) {this.model = model; }

Мы можем создать экземпляр каждого типа Car, используя ключевое слово new, передавая его тип:

var cars = [новый Infiniti («G37»), новая Honda («Civic»), новый Hyundai («Accent»)];

Предположим, мы хотели участвовать в гонках наших автомобилей. Мы могли бы написать что-то вроде этого, где описано ускорение каждого автомобиля:

function race (car) {if (car instanceof Infiniti) {console.log (car.model + ": очень быстро разгоняешься от 0 до 60 миль в час!"); } else if (автомобиль экземпляра Honda) {console.log (car.model + ": движение от 0 до 60 миль в час на умеренной скорости."); } else if (car instanceof Hyundai) {console.log (car.model + ": переход от 0 до 60 миль в час при сканировании."); }} // Давайте гонять на некоторых машинах! for (var i in cars) {гонки (cars [i]); } / * выводит: "G37: очень быстро разгоняется от 0 до 60 миль в час!" «Civic: движение от 0 до 60 миль в час на умеренной скорости». «Акцент: движение от 0 до 60 миль в час при ползании». * * /

* Нет неуважения к владельцам Hyundai Accents. Я просто высмеиваю своего приятеля!

Оператор instanceof проверяет определенные типы автомобилей и выводит соответствующий текст.

Хотя в приведенном выше коде нет ничего технически неправильного, существует довольно серьезный недостаток дизайна, заключающийся в том, что каждый раз, когда мы создаем новый тип автомобиля, мы должны обновлять функцию race ()!

Излишне говорить, что есть лучший способ настроить функцию race () для различных типов автомобилей.

Давайте представим, что типы автомобилей должны реализовывать метод ускорения (), специфичный для данного типа автомобилей. Затем в функции race () мы можем просто передать экземпляр Car в функцию race (), чтобы он, в свою очередь, мог вызвать метод accelerate () объекта:

функция Infiniti (модель) {this.model = модель; } Infiniti.prototype.accelerate = function () {console.log (this.model + ": очень быстрый переход от 0 до 60 миль в час!"); } функция Honda (модель) {this.model = model; } Honda.prototype.accelerate = function () {console.log (this.model + ": движение от 0 до 60 миль в час на умеренной скорости."); } function Hyundai (model) {this.model = model; } Hyundai.prototype.accelerate = function () {console.log (this.model + ": переход от 0 до 60 миль в час при сканировании."); } function race (car) {// Динамически вызывать метод accelerate () // любого автомобиля, в который был передан. car.accelerate (); } // Давайте гонять на некоторых машинах! var cars = [новый Infiniti («G37»), новая Honda («Civic»), новый Hyundai («Accent»)]; for (var i in cars) {гонки (cars [i]); }

Защита от самозванцев

Поскольку в JavaScript отсутствует проверка компилятором языков программирования, таких как Java, все равно не мешало бы проверить, что переданный объект действительно может ускоряться и выдает ошибку, если не может. Для иллюстрации мы передадим кушетку функции race ():

function race (car) {// Динамически вызывать метод accelerate () // любого автомобиля, в который был передан. if (car.accelerate) car.accelerate (); еще бросить новый DuckTypeError («Эй, ты не машина!»); } // попробуем погонять на диване !? function Couch (type) {this.type = type; } раса (новый Couch («Диван»));

Вот результат, полученный при попытке участвовать в гонке на диване. Обратите внимание, что код DuckTypeError здесь не показан, но он находится в демонстрация :

G37: очень быстро с 0 до 60 миль в час! Civic: движение от 0 до 60 миль в час на умеренной скорости. Акцент: движение от 0 до 60 миль в час при ползании. SCRIPT5022: DuckTypeError: Эй, ты не машина! index.html (71,7)

Duck Typing гарантирует, что наш объект «крякает как утка». Преимущество этого подхода заключается в том, что нам не нужно вносить какие-либо дальнейшие обновления функции race () для соответствия новым типам автомобилей.

Заключение

В сегодняшней статье мы проследили эволюцию Duck Typing в JavaScript и выяснили, как использовать Duck Typing для эмуляции поведения Java-интерфейсов в объектах JS. Есть полный демонстрация на Codepen для вас, чтобы исследовать.


Роб Гравелль проживает в Оттаве, Канада. Его проектная компания построил веб-приложения для многочисленных предприятий и государственных учреждений. Напишите ему ,

Альтер-эго Роба "Blackjacques" - опытный гитарист, выпустивший несколько компакт-дисков и кавер-версии песен. Журнал Brave Words (выпуск № 92) назвал его группу Ivory Knight одной из лучших канадских хард-рок и метал групп.


Похожие

JavaScript - бодрящий дух сайтов
... пользуют JavaScript. Такая статистика не может быть удивительной, потому что этот язык программирования сценариев является бодрящим духом веб-сайтов, элементом, который их динамизирует. Без JavaScript веб-сайты были бы похожи на каменные планшеты. С ним они становятся интерактивными, интересными, функциональными. Чтобы проверить, как работает JavaScript, вам не нужно устанавливать среду разработки. Если мы хотим поиграть
Как начать торговлю
... любого трейдера независимо от его торгового опыта и предпочтений. Вы можете работать как на демонстрационном счете (демо-счета), тренируясь и проверяя свои умения, так и на реальном счете, зарабатывая реальные деньги. Для начинающих хорошим вариантом будет открытие демо-счета Demo Pro или реального центов счета Pro-Cent.
Как играть в игры Sega Dreamcast на вашем компьютере (NullDC)
Sega Dreamcast была последней консольной версией Sega до того, как компания реорганизовалась в стороннего разработчика программного обеспечения. В то время как эта консоль пострадала от раннего выхода, некоторые игры, выпущенные на этой консоли, были оценены многими игроками как высококачественные. В этом руководстве мы покажем вам, как играть в игры Dreamcast на эмуляторе NullDC. Первое, что нам нужно, это эмулятор. К сожалению, как и в Project 64, этот эмулятор страдает тем, что один
Googler: инструмент командной строки для поиска Google с терминала Linux
Сегодня поиск в Google является хорошо известным и наиболее часто используемым поисковым механизмом во всемирной паутине ( WWW ). Если вы хотите собирать информацию с миллионов серверов в Интернете, то это номер один и самый надежный инструмент для этого. цель плюс намного больше. Многие люди по всему миру в основном используют поиск Google через графический интерфейс веб-браузера. Тем не менее, фанаты командной строки, которые всегда
Как эмулировать PS2
... ��колько старых игр для PS2, в которые вы хотели бы сыграть? Что ж, на данный момент у вас есть два способа: вы можете забраться на чердак, стряхнуть старую PlayStation 2 и скрестить пальцы, чтобы она по-прежнему работала нормально, или - если вам нужен совет друга - вы можете установить эмулятор PS2 и играть прямо на ваш компьютер. Да, вы правильно прочитали! С помощью простого бесплатного эмулятора вы можете играть в игры PlayStation 2 на своем ПК практически идеально. Вы можете использовать
Как улучшить положение магазина в Google или 5 эффективных способов получения ссылок
... по крайней мере, в начале деятельности по электронной торговле)"> Забота о безопасности данных клиентов является одной из основных обязанностей владельцев интернет-магазинов, но из моих наблюдений выясняется, что это также одна из наиболее часто пропускаемых проблем (по крайней мере, в начале деятельности по электронной торговле). Конечно, это огромная ошибка, которая может стоить нам огромного доверия. Я приглашаю вас прочитать интервью с Адамом Домбровски из компании
Современное искусство таинственно, непостижимо для многих. Zachęta - Национальная художественная галерея пос...
Современное искусство таинственно, непостижимо для многих. Zachęta - Национальная художественная галерея поставила своей целью сближение с учителями, а через них и со студентами, организовав серию тренингов и семинаров, на которых в настоящее время проводится набор.
Sony Xperia E4
Sony Xperia E4g - это хороший Android-смартфон от Sonya, который предлагает хороший 4,7-дюймовый экран, очень хорошую производительность и поддержку скоростей 4G мобильного интернета для чуть более 1000 кун. Все это, и некоторые
Калибровка монитора: калибруется ли ваш монитор?
(Вы, если вы заботитесь о своих фотографиях) Опубликовано: июль 2007 Обновлено: апрель 2008 г. Здесь, в Imaging Resource, многое зависит от нашего суждения о качестве изображения в камерах, которые мы рассматриваем, поэтому мы уделяем особое внимание калибровке монитора и нашим условиям просмотра, чтобы избежать даже малейшего смещения в наших
Поиск - Категории контента Harvard Business Review Польша - Harvard Business Review Польша
... спользуйте бессознательную мудрость толпы Истинная сила коллективной мудрости толпы не скрыта в мнениях отдельных людей, но глубоко скрыта в базах данных вашей компании. Благодаря новым инструментам извлечения информации о клиентах организации могут найти «бессознательную мудрость», объединяющую людей, которые ее не осознают.
Скачать видео на YouTube - как это работает?
... подключаются к браузеру и расширяют интерфейс одной или несколькими ссылками. Они позволяют скачивать в разных качествах. Конвертер Qweb в YouTube даже идет еще дальше. Это позволяет загружать видео в формате MP3 - очевидно, информация об изображении теряется, оставляя только саундтрек. Если вы хотите сохранить в случае песен в любом случае только песню, например, на телефоне, то этого достаточно. Инструмент постоянно проверяет в фоновом режиме, является ли вызываемая страница YouTube.

Комментарии

Так как же узнать, показывает ли ваш монитор все, что должно быть?
Так как же узнать, показывает ли ваш монитор все, что должно быть? Чтобы действительно сказать, вам нужно откалибровать его, но есть пара простых вещей, которые нужно проверить, которые покажут вам, насколько необходима калибровка. Тестовые изображения ниже быстро подскажут, насколько плохо настроен ваш монитор. (Обратите внимание, что мы сказали «насколько плохо», а не «если»: «Если вы не используете дисплей очень высокого класса, вполне вероятно, что некалиброванный монитор значительно
Неужели владельцы магазинов воспринимают это скорее как инвестицию в автострахование - только когда что-то случается, они сожалеют, что не купили его раньше?
Неужели владельцы магазинов воспринимают это скорее как инвестицию в автострахование - только когда что-то случается, они сожалеют, что не купили его раньше? AD: Инвестиции в покупку SSL-сертификата - это, прежде всего, выполнение требований закона о защите персональных данных, о котором знают или хотят знать только некоторые владельцы магазина. Все еще существует общее мнение (особенно среди мелких продавцов), что им не нужны сертификаты SSL, потому что у них низкий оборот
Так как же помогает эта витрина?
Так как же помогает эта витрина? Чтобы ответить на этот вопрос, давайте попробуем составить список людей, которые принимают участие в разработке компонентов пользовательского интерфейса и оценивают их потребности. В зависимости от вашего рабочего процесса этот список может отличаться, но обычно возникают следующие подозрения: Дизайнер или эксперт по UX Это человек, ответственный за внешний вид пользовательского интерфейса. После того, как фаза макета проекта закончена,
Как смотреть прямые спортивные трансляции на FireStick?
Как смотреть прямые спортивные трансляции на FireStick? FireStick - это приложение, которое изменило лицо развлечений, революционизировав впечатления от просмотра телевизора. Большое количество людей по всему миру избавились от кабелей и теперь переходят на такие устройства, как Amazon FireStick. Представьте себе, что у вас есть один съемный модуль, который может превратить ваш телевизор в галактику интересного контента, который вы хотите посмотреть. Одно устройство предоставляет вам
Теперь с основной идеей, как, черт возьми, я собираюсь это сделать?
Теперь с основной идеей, как, черт возьми, я собираюсь это сделать? Длинная горизонтальная стойка ворот будет работать отлично. Я раньше не использовал скоростную железную дорогу для поста ворот, так что это может стать хорошей возможностью улучшить мою игру. Я нашел ресурс в местном масштабе и купил четыре 6-футовых части.
Как это работает точно?
Как это работает точно? 1) введите в поисковике Google "ванна для инвалидов" Как вы можете видеть на картинке ниже, адреса веб-сайтов / порталов соответствуют фразе «менеджмент и технологический инжиниринг», введенной нами. Под фразой есть ссылки, проиндексированные Google в обычных результатах.
Как оно сейчас?
Как оно сейчас? Различные ... Срезанные цветы были вытеснены горшечными цветами, которые украшают окрестности и напоминают вам о приятных моментах намного дольше, чем их "недолговечные кузены из вазы". Однако сейчас цветы обычно являются лишь дополнением к «настоящему подарку». А если не цветы, то что? Альтернативы цветам, как правило, бывают разные. В зависимости от случая.
Кто лучше защищает домашний компьютер от вымогателей, зараженных веб-сайтов и других угроз?
Кто лучше защищает домашний компьютер от вымогателей, зараженных веб-сайтов и других угроз? Примечание: лучшие антивирусные сканеры вы можете найти в нашем новом Антивирус Тест 2018 , В этом мы сравниваем 12 комплектов безопасности от Avira до Kaspersky. В последние годы вредоносная сцена стала «насильственной», так что, по крайней мере, она кажется пользователю
Как работает Googler?
Как работает Googler? Он предоставляет интерфейс от командной строки к поиску Google и отображает информацию о результатах заголовка, URL и абстрактную информацию на страницах, с навигацией по страницам, аналогичной навигации в веб-браузере с графическим интерфейсом. Посмотрите быстрое демо Googler .
Как использовать силу и знания активных потребителей?
Как использовать силу и знания активных потребителей? Среди клиентов многих компаний больше людей, которые знают о своих потребностях, знают о различных рыночных предложениях и готовы делиться ими с другими клиентами и производителями. Вот почему сбор, сбор и использование данных о потребителях так важны. Выявление среди них просумеров, а затем персонализированные контакты, индивидуальные обращения к ним и анализ их мнений - первый шаг к эффективной стратегии сотрудничества с просумерами.
Как?
Как? С тизерами, которые не раскрывают, каким будет ваш продукт. Например, если ваш продукт представляет собой линию одежды для мужчин, назовите свой тизер «Project Men». Регулярно публикуйте в Facebook фотографии мужчин с разным размером тела, выставляющих напоказ разные моды. Это создаст любознательность среди людей, и они захотят узнать больше о «Project Men» и о чем именно. Начните свою рекламную кампанию по крайней мере за 20-30 дней до запуска вашего

Вебинар: По запросу, по требованию Настольный компьютер как услуга, разработанный для любого облака?
?колько старых игр для PS2, в которые вы хотели бы сыграть?
Скачать видео на YouTube - как это работает?
Так как же узнать, показывает ли ваш монитор все, что должно быть?
Неужели владельцы магазинов воспринимают это скорее как инвестицию в автострахование - только когда что-то случается, они сожалеют, что не купили его раньше?
Так как же помогает эта витрина?
Как смотреть прямые спортивные трансляции на FireStick?
Теперь с основной идеей, как, черт возьми, я собираюсь это сделать?
Как это работает точно?
Как это работает точно?