Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Введение в ECMAScript 6

Покупка
Артикул: 712471.01.99
Доступ онлайн
499 ₽
В корзину
Данная книга содержит пошаговые инструкции по использованию новых возможностей ECMAScript б вместо устаревших трюков и приемов программирования на JavaScript. Книга начинается с знакомства со всеми встроенными объектами ES6 и описания создания итераторов ES6. Затем она расскажет, как писать асинхронный код с помощью ES6 в обычном стиле синхронного кода. Далее описывается использование программного интерфейса рефлексии Reflect API для исследования и изменения свойств объектов. Затем рассматривается создание прокси-объектов и их применение для перехвата и изменения поведения операций с объектами. Наконец, демонстрируются устаревшие методы модульного программирования, такие как IIFE, CommonJS, AMD и UMD, и сравниваются с модулями ES6, способными значительно увеличить производительность веб-сайтов. Издание предназначено для программистов на JavaScript, обладающих базовыми навыками разработки, и желающим освоить новейшие возможности ECMAScript б для совершенствования своих программ, выполняемых на стороне клиента.
Прасти, Н. Введение в ECMAScript 6 / пер. с англ. Р.Н. Рагимова ; Нараян Прасти. - Москва : ДМК Пресс, 2016. - 176 с. - ISBN 978-5-97060-392-5. - Текст : электронный. - URL: https://znanium.com/catalog/product/1028082 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Нараян Прасти

Введение 

в ECMAScript 6

Learning 
ECMAScript 6

Learn all the new ES6 features and be among 
the most prominent JavaScript developers 
who can write efficient JS programs as per 
the latest standards!

Narayan Prusty

BIRMINGHAM - MUMBAI

Введение 
в ECMAScript 6

Знакомьтесь с новыми функциями ES6 
и присоединяйтесь к ведущим 
программистам JavaScript, пишущим 
эффективный код JS согласно последним 
стандартам!

Нараян Прасти

Москва, 2016

УДК   004.438ECMAScript 6
ББК   32.973.2
П70

П70     Нараян Прасти

Введение в ECMAScript 6. / пер. с англ. Рагимов Р. Н.– М.: ДМК 
Пресс, 2016. – 176 с.: ил.

             ISBN 978-5-97060-392-5

Данная книга содержит пошаговые инструкции по использованию 
новых возможностей EСMAScript 6 вместо устаревших трюков и приемов программирования на JavaScript.
Книга начинается с знакомства со всеми встроенными объектами 
ES6 и описания создания итераторов ES6. Затем она расскажет, как 
писать асинхронный код с помощью ES6 в обычном стиле синхронного кода. Далее описывается использование программного интерфейса 
рефлексии Reflect API для исследования и изменения свойств объектов. Затем рассматривается создание прокси-объектов и их применение для перехвата и изменения поведения операций с объектами. 
Наконец, демонстрируются устаревшие методы модульного программирования, такие как IIFE, CommonJS, AMD и UMD, и сравниваются 
с модулями ES6, способными значительно увеличить производительность веб-сайтов.
Издание предназначено для программистов на JavaScript, обладающих базовыми навыками разработки, и желающим освоить новейшие 
возможности EСMAScript 6 для совершенствования своих программ, 
выполняемых на стороне клиента.

Original English language edition published by Published by Packt Publishing 
Ltd., Livery Place, 35 Livery Street, Birmingham B3 2PB, UK. Copyright © 2015 
Packt Publishing. Russian-language edition copyright © 2016 by DMK Press. All 
rights reserved.

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

ISBN 978-1-78588-444-3 (англ.)                     Copyright © 2015 Packt Publishing 
ISBN 978-5-97060-392-5 (рус.)                       © Оформление, перевод на русский язык,

          ДМК Пресс, 2016

ОГЛАВЛЕНИЕ

Предисловие ................................................... 10

Об авторе ........................................................ 12

О технических рецензентах ................................ 13

Введение ........................................................ 16

О чем рассказывается в этой книге ............................................... 16

Что понадобится при чтении этой книги  ........................................ 17

Совместимость с ECMAScript 6 ..................................................... 18

Запуск ECMAScript 6 в несовместимых реализациях ..................... 18

Кому адресована эта книга  ........................................................... 19

Соглашения  .................................................................................. 19

Отзывы и пожелания ..................................................................... 20

Скачивание исходного кода примеров .......................................... 21

Нарушение авторских прав ................................................................... 21

Глава 1. Игры с синтаксисом ............................... 22

Ключевое слово let ........................................................................ 22

Объявление переменных с областью видимости в пределах функции ... 23
Объявление переменных с областью видимости в пределах блока  ...... 24
Повторное объявление переменных ..................................................... 25

Ключевое слово const  ................................................................... 27

Область видимости констант  ............................................................... 27
Ссылки на объекты при помощи констант ............................................. 28

Значения параметров по умолчанию ............................................. 29

Оператор расширения  .................................................................. 30

Другие применения оператора расширения ......................................... 31
Расширение нескольких массивов ........................................................ 32

Дополнительные параметры  ........................................................ 32

Деструктивное присваивание  ....................................................... 33

 Деструктивное присваивание массивов ............................................... 34
Деструктивное присваивание объектов ................................................ 37

Стрелочные функции ..................................................................... 39

Оглавление

Расширенные литералы объектов ................................................. 41

Определение свойств ........................................................................... 41
Определение методов .......................................................................... 41
Вычисляемые имена свойств ................................................................ 42

Итоги  ............................................................................................ 42

Глава 2. Знакомство с библиотекой ..................... 43

Работа с числами .......................................................................... 43

Двоичное представление  ..................................................................... 44
Восьмеричное представление  ............................................................. 44
Метод Number.isInteger(number)  .......................................................... 45
Метод Number.isNaN(value)  .................................................................. 45
Метод Number.isFinite(number)  ............................................................. 46
Метод Number.isSafeInteger(number)  .................................................... 47
Свойство Number.EPSILON  ................................................................... 48

Объект Math  ................................................................................. 49

Тригонометрические операции ............................................................. 49
Алгебраические операции  .................................................................... 49
Прочие методы  .................................................................................... 50

Работа со строками  ...................................................................... 52

Управляющая последовательность для больших кодовых пунктов ........ 53
Метод codePointAt(index)  ..................................................................... 53
Метод String.fromCodePoint(number1, …, number 2)  ............................. 53
Метод repeat(count)  ............................................................................. 54
Метод includes(string, index)  ................................................................. 54
Метод startsWith(string, index)  ............................................................... 54
Функция endsWith(string, index)  ............................................................ 55
Нормализация  ..................................................................................... 55
Шаблонные строки ............................................................................... 57
Выражения ........................................................................................... 57

Массивы  ....................................................................................... 60

Метод Array.from(iterable, mapFunc, this)  ............................................... 60
Метод Array.of(values…)  ........................................................................ 61
Метод fill(value, startIndex, endIndex)  ..................................................... 61
Метод find(testingFunc, this)  ................................................................. 62
Метод findIndex(testingFunc, this)  ......................................................... 63
Метод copyWithin(targetIndex, startIndex, endIndex)  ............................... 63
Методы entries(), keys() и values()  ......................................................... 64

Коллекции  .................................................................................... 64

Буферные массивы  .............................................................................. 65
Типизированные массивы ..................................................................... 67
Объект Set ............................................................................................ 68
Объект WeakSet  .................................................................................... 69
Объект Map  .......................................................................................... 69
Объект WeakMap  .................................................................................. 70

Объект Object  ............................................................................... 71

Оглавление

Свойство __proto__  ............................................................................... 71
Метод Object.is(value1, value2)  ............................................................. 72
Метод Object.setPrototypeOf(object, prototype) ...................................... 72
Метод Object.assign(targetObj, sourceObjs…) ........................................ 72

Итоги  ............................................................................................ 73

Глава 3. Использование итераторов ..................... 75

Символы в спецификации ES6 ...................................................... 75

Оператор typeof  ................................................................................... 76
Оператор new ....................................................................................... 76
Использование символов как ключей свойств ....................................... 77
Метод Object.getOwnPropertySymbols()  ................................................ 77
Метод Symbol.for(string)  ....................................................................... 78
Встроенные символы  ........................................................................... 79

Протоколы итераций  .................................................................... 79

Протокол итератора  ............................................................................. 79
Итерационный протокол ....................................................................... 80

Генераторы  ................................................................................... 81

Метод return(value)  ............................................................................... 83
Метод throw(exception)  ......................................................................... 84
Ключевое слово yield*  .......................................................................... 84
Цикл for…of  .......................................................................................... 85

Оптимизация хвостового вызова  .................................................. 86

Преобразование неконцевых вызовов в концевые вызовы .................... 87

Итоги  ............................................................................................ 88

Глава 4. Асинхронное программирование ............. 89

Модель выполнения JavaScript  ..................................................... 89

Разработка асинхронного кода  ..................................................... 90

Асинхронный код, основанный на событиях .......................................... 91
Асинхронный код, основанный на обратных вызовах  ............................ 94

Объекты Promise в помощь ............................................................ 95

Конструктор Promise  ............................................................................ 96
Результат асинхронной операции ......................................................... 97
Метод then(onFulfilled, onRejected)  ....................................................... 98
Метод catch(onRejected)  .................................................................... 104
Метод Promise.resolve(value)  .............................................................. 106
Метод Promise.reject(value)  ................................................................ 107
Метод Promise.all(iterable)  .................................................................. 107
Метод Promise.race(iterable)  ............................................................... 108

Программные интерфейсы JavaScript, основанные на объектах 
Promise  ....................................................................................... 109

Программный интерфейс состояния батареи ..................................... 109
Программный интерфейс веб-криптографии  ..................................... 110

Оглавление

Итоги  .......................................................................................... 111

Глава 5. Реализация Reflect API ......................... 112

Объект Reflect ............................................................................. 112

Метод Reflect.apply(function, this, args)  ............................................... 113
Метод Reflect.construct(constructor, args, prototype)  ........................... 113
Метод Reflect.defineProperty(object, property, descriptor)  .................... 114
Метод Reflect.deleteProperty(object, property)  ..................................... 117
Метод Reflect.enumerate(object)  ......................................................... 118
Метод Reflect.get(object, property, this)  ............................................... 118
Метод Reflect.set(object, property, value, this)....................................... 119
Метод Reflect.getOwnPropertyDescriptor(object, property)  ................... 119
Метод Reflect.getPrototypeOf(object)  .................................................. 120
Метод Reflect.setPrototypeOf(object, prototype)  .................................. 120
Метод Reflect.has(object, property)  ..................................................... 121
Метод Reflect.isExtensible(object)  ....................................................... 121
Метод Reflect.preventExtensions(object)  .............................................. 121
Метод Reflect.ownKeys(object)  ........................................................... 122

Итоги  .......................................................................................... 122

Глава 6. Использование прокси-объектов ........... 123

Основы прокси-объектов ............................................................ 123

Терминология ..................................................................................... 124

Программный интерфейс Proxy API ............................................. 124

Ловушки  ............................................................................................. 125

Метод Proxy.revocable(target, handler)  ......................................... 137

Возможный сценарий использования  ................................................ 138

Использование прокси  ............................................................... 138

Итоги  .......................................................................................... 138

Глава 7. Прогулка по классам ........................... 139

Понимание объектно-ориентированной модели JavaScript  ........ 139

Типы данных JavaScript  ...................................................................... 140
Создание объектов ............................................................................. 140
Понятие наследования ........................................................................ 141
Конструкторы элементарных типов данных ......................................... 145

Использование классов .............................................................. 146

Определение классов ......................................................................... 147
Методы прототипа .............................................................................. 149
Статические методы  .......................................................................... 152
Реализация наследования классов ..................................................... 152
Вычисляемые имена методов  ............................................................ 154
Атрибуты свойств................................................................................ 155
Классы не всплывают!  ........................................................................ 155
Переопределение результата метода constructor ............................... 156

Оглавление

Статическое свойство со средствами доступа Symbol.species ............ 156
Неявный параметр new.target  ............................................................. 158

Использование super в литералах объектов ................................ 159

Итоги  .......................................................................................... 159

Глава 8. Модульное программирование ............. 160

Введение в модули JavaScript ..................................................... 160

Реализация модулей по-старому ................................................ 161

Немедленно вызываемые функции-выражения   ................................. 161
Асинхронное определение модулей .................................................... 162
CommonJS  ......................................................................................... 164
Универсальное определение модуля .................................................. 164

Реализация модулей – новый подход .......................................... 165

Создание модулей ES6  ...................................................................... 166
Импорт модулей в ES6  ....................................................................... 167
Загрузчик модулей  ............................................................................. 169
Использование модулей в браузерах .................................................. 169
Использование модулей в функции eval()  ........................................... 170
Экспорт по умолчанию или экспорт по именам  .................................. 170
Пример  .............................................................................................. 170

Итоги  .......................................................................................... 172

Предметный указатель .................................... 173

ПРЕДИСЛОВИЕ

Прежде не было более подходящего времени для программирования 
на JavaScript. За последние несколько лет на наших глазах JavaScript 
прошел путь от языка, с которым никто не хотел иметь дела, до языка, которым все непременно желают овладеть. Разработка больших 
и сложных приложений для браузеров сегодня подталкивает развитие JavaScript, как никогда раньше. Фреймворки и полностью новые 
подходы к созданию приложений породили новые потребности в разработке на стороне клиента, и сообщество пришло к соглашению о 
необходимости их удовлетворения.

Спецификация ECMAScript 2015 или ES6, как ее обычно назы
вают, наконец-то, привела язык в соответствие с нашими высокими 
требованиями. Значительными приобретениями является встроенная поддержка отложенных вычислений и модульной организации, 
но присутствуют также и небольшие дополнения, которые делают повседневную разработку более приятной. Познакомившись поближе 
с приемом деструктурирования объектов, вы будете удивляться, как 
прежде удавалось обходиться без него, а впервые воспользовавшись 
стрелочной функцией, вы никогда не захотите вновь использовать 
«function». С помощью функции «let» вы избавитесь от сложностей с 
областями видимости функций и от утечки переменных, и вам реже 
придется биться головой о стену.

ES6 – великолепный язык, совершивший  невероятный скачок от
носительно ES5, а упорный труд многих членов сообщества сделал 
возможным его использование уже сегодня, не дожидаясь полной 
реализации в браузерах. Существуют инструменты преобразования 
кода ES6 в код, совместимый со спецификацией ES5, а это значит, что 
будущее уже здесь, его не надо ждать еще 5 лет, как это часто бывало 
с JavaScript.

Эта книга познакомит вас с наиболее полезными нововведениями 

в JavaScript и всей, доступной уже сейчас, функциональностью. Научит, как конструировать модульные приложения, используя встроенную систему модулей ES6, и как сделать код чище, лаконичнее и 

Предисловие

более приятным для работы. Изучение нового стандарта является 
сложной задачей для любого разработчика, и я рад внести свой вклад, 
написав предисловие к книге, которая значительно упростит эту задачу.

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

Джек Франклин (Jack Franklin)

 
 
 
            Программист JavaScript из GoCardless

 
 
 
            @Jack_Franklin

http://www.jackfranklin.co.uk

ОБ АВТОРЕ

Нараян Прасти (Narayan Prusty) разработчик веб- и мобильных приложений. Специализируется на WordPress, HTML5, JavaScript, PHP, 
Solr и Cordova. Изучал эти технологии и создавал приложения с их 
помощью в течение многих лет.

Является основателем сайта QScutter.com, который проводит 

курсы по различным темам разработки приложений и имеет более 
10 000 подписчиков по всему миру. Его личный блог http://www.
QNimate.com один из самых популярных в рейтинге блогов Intel 
XDK и WordPress. Он также работает консультантом и внештатным 
разработчиком во многих компаниях по всему миру.

Посетите его личную страничку http://www.twitter.com/narayan
prusty.

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

О ТЕХНИЧЕСКИХ 

РЕЦЕНЗЕНТАХ

Андреа Чиарелли (Andrea Chiarelli) имеет более чем 20 летний опыт 
работы инженером-программистом и техническим писателем. В своей профессиональной карьере использовал различные технологии: 
от C# до JavaScript, от ASP.NET до AngularJS, от REST до PhoneGap/
Cordova.

Сотрудничал со многими электронными и печатными журналами, 

такими как Computer Programming и ASP Today, и был соавтором нескольких книг, изданных Wrox Press.

В настоящее время работает старшим инженером-программистом 

в итальянском офисе компании Apparound Inc., основанной в самом 
центре Силиконовой долины и занимающейся разработкой программ 
для мобильных устройств, а также является постоянным автором 
итальянского электронного журнала HTML.it, специализирующегося 
на веб-технологиях.

Филипп Реневье Гонен (Philippe Renevier Gonin) с 2005 года работает ассистентом профессора в Университете Софии Антиполис (Ницца, Франция). Преподает веб-технологии, программную инженерию 
(проектирование и разработку), и предмет «Взаимодействие человека с компьютером» (Human Computer Interaction, сокращено HCI). 
Как исследователь, Филипп занимается связями между интерактивным пользовательским дизайном (например, моделями пользователей и задач) и программным обеспечением (например, компонентной 
архитектурой и разработкой пользовательского интерфейса). В своих 
проектах часто использует программное обеспечение и инструменты 
Javascript, HMTL, CSS, Java (Android).

Доменико Лучиани (Domenico Luciani), увлеченный 22-летний программист. В настоящее время работает инженером-программистом в 
нескольких компаниях и обучается в университете Палермо.

Отехническихрецензентах

С энтузиазмом занимается задачами распознавания образов. Отда
ет предпочтение компьютерной безопасности и пентестам, принимал 
участие в премиальных программах ряда компаний. Работал со многими технологиями: MongoDB, Node.js, PHP, PostgreSQL и С.

Пишет модули Node.js, которые публикует на сайте NPM. Не раз 

выступал в роли технического рецензента и в настоящее время изучает язык программирования GoLang, просто для удовольствия.

Является членом сообщества Maker и любит работать на своем 

одноплатным компьютере Raspberry Pi. Обожает писать код в текстовом редакторе Vim и управлять исходными текстами с помощью Git. 
Пишет тесты и участвует в проектах с открытым исходным кодом в 
Интернете.

В свободное время занимается бегом, любит паркур. Вы може
те найти более подробную информацию о нем на сайте http://www.
dlion.it.

Михир Mone (Mihir Mone), аспирант из Университета Монаша, Австралия. Окончил курс обучения по распределенным вычислениям, 
но сейчас занимается разработкой веб- и мобильных приложений. 
Повозившись, некоторое время, с маршрутизаторами и коммутаторами, он  решил реализовать свою тягу к веб-разработке, не дизайну, а именно разработке. Его интересует и привлекает создание вебсистем и приложений, а не веб-сайтов со всей их фантастической 
флеш-анимацией. Он даже вернулся в свою альма-матер, чтобы преподавать веб-разработку, вернуть полученные им знания.

Теперь он работает в небольшой инженерно-программной фирме в 

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

Он также большой поклонник JavaScript и принимал участие в 

рецензировании нескольких книг о JQuery и JavaScript. Энтузиаст 
Linux и большой сторонник движения за открытое программное обеспечение. Считает, что программное обеспечение обязательно должно 
быть свободным, чтобы раскрыть весь свой потенциал.

Как убежденный компьютерщик, тратит часть своего свободного 

времени на написание кода, в надежде, что это поможет другим. Вы 
можете найти более подробную информацию о нем на сайте http://
mihirmone.apphb.com.

Такехару Ошида (Takeharu Oshida) (https://github.com/georgeOsdDev) работает в недавно запущенном проекте Mobilus (http://mobilus.

Отехническихрецензентах

co.jp/), занимающемся созданием коммуникационной платформы 
реального времени и SDK под названием Konnect.

Как программист на JavaScript, разрабатывает JavaScript-библи
отеки и ES6-совместимые веб-приложения на React.JS.

Он также участвует в разработке веб-фреймворка Xitrum (http://

xitrum-framework.github.io/). В рамках этого проекта изучает функциональное программирование на языке Scala, создавая примеры 
приложений и занимаясь переводом документации.

Был техническим рецензентом книги Learning Behavior-driven Devel
opment Javascript, опубликованной издательством Packt Publishing.

Юрий Струмпфлохнер (Juri Strumpflohner) увлеченный разработчик, любит программировать, следит за последними тенденциями в 
веб-разработке и делится своими выводами с другими. Работает программным архитектором и техническим руководителем в компании 
поддержки электронного правительства, где отвечает за подготовку 
разработчиков, внедрение инноваций и контроль качества программного обеспечения.

В свободное время участвует в проектах с открытым исходным 

кодом, занимается рецензированием книг (подобных этой), переписывается в Twitter (@juristr) или пишет о последних новостях технологий веб-разработки в своем блоге на http://juristr.com. В настоящее время его особенно интересуют ES 2015 (ES6), AngularJS, React, 
Babel и все связанное с современной веб-разработкой.

Если Юрий не программирует, то учится или тренируется, зани
маясь боевым искусством Йосейкан Будо (Yoseikan Budo), где достиг черного пояса второго дана. Вы можете связаться с ним в Twitter 
(@juristr) или посетить его блог http://juristr.com.

Доступ онлайн
499 ₽
В корзину