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

Разработка программных комплексов на языке JavaScript

Покупка
Артикул: 799098.01.99
Доступ онлайн
400 ₽
В корзину
Рассматриваются вопросы практического использования языка JavaScript для разработки веб-сервисов. Основное внимание уделяется подробному разбору сложных теоретических вопросов прототипного наследования, политик безопасности. В качестве средств разработки используются платформа Node.js и фреймворк Express. Для студентов, специализирующихся в области прикладной информатики, компьютерных наук и занимающихся разработкой программного обеспечения.
Солодушкин, С. И. Разработка программных комплексов на языке JavaScript : учебное пособие / С. И. Солодушкин, И. Ф. Юманова ; под общ. ред. В. Г. Пименова ; Министерство науки и высшего образования Россйской Федерации, Уральский федеральный университет. - Екатеринбург : Изд-во Уральского ун-та, 2020. - 132 с. - ISBN 978-5-7996-3034-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/1936353 (дата обращения: 25.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ  
РОССИЙСКОЙ ФЕДЕРАЦИИ

УРАЛЬСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ  
ИМЕНИ ПЕРВОГО ПРЕЗИДЕНТА РОССИИ Б. Н. ЕЛЬЦИНА

Екатеринбург
Издательство Уральского университета
2020

С. И. Солодушкин, И. Ф. Юманова

РАЗРАБОТКА  
ПРОГРАММНЫХ КОМПЛЕКСОВ  
НА ЯЗЫКЕ JAVASCRIPT

Учебное пособие

Рекомендовано методическим советом
Уральского федерального университета
для студентов вуза, обучающихся по направлениям подготовки
02.03.03 «Математическое обеспечение и администрирование 
информационных систем», 02.03.01 «Математика и компьютерные науки», 
02.03.02 «Фундаментальная информатика и информационные технологии», 
по специальности 10.05.01 «Компьютерная безопасность»

С60
Солодушкин, С. И.
Разработка программных комплексов на языке JavaScript : учеб‑
ное пособие / С. И. Солодушкин, И. Ф. Юманова ; под общ. ред. 
В. Г. Пименова ; Министерство науки и высшего образования Рос‑
сийской Федерации, Уральский федеральный университет. —  Ека‑
теринбург : Изд‑во Урал. ун‑та, 2020. — 132 с. : ил. — 100 экз. —  ISBN 
978‑5‑7996‑3034‑8. —  Текст : непосредственный.

ISBN 978‑5‑7996‑3034‑8

Рассматриваются вопросы практического использования языка Java‑

Script для разработки веб‑сервисов. Основное внимание уделяется подроб‑
ному разбору сложных теоретических вопросов прототипного наследова‑
ния, политик безопасности. В качестве средств разработки используются 
платформа Node.js и фреймворк Express.
Для студентов, специализирующихся в области прикладной инфор‑
матики, компьютерных наук и занимающихся разработкой программного 
обеспечения.
УДК 004.4(075.8)
ББК 32.973.2я73

УДК 004.4(075.8)
ББК 
32.973.2я73

 
С60

ISBN 978‑5‑7996‑3034‑8 
© Уральский федеральный университет, 2020

П о д  о б щ е й  р е д а к ц и е й
В. Г. Пименова

Ре ц е н з е н т ы:
кафедра прикладной математики и технической графики
Уральского государственного архитектурно‑ художественного 
университета (заведующий кафедрой  
доктор физико‑ математических наук, профессор С. С. Титов);
А. Б. Ложников, кандидат физико‑ математических наук, доцент,  
старший научный сотрудник отдела дифференциальных уравнений
Института математики и механики УрО РАН

ОГЛАВЛЕНИЕ

Предисловие 
5

Глава 1. Основные понятия и история языка JavaScript 
6
1.1. Краткая история появления языка JavaScript: причины 
и предпосылки 
6
1.2. Тезаурус (основные понятия и связи между ними) 
8
1.3. Общая характеристика языка 
13
Контрольные вопросы 
17

Глава 2. Прототипное наследование в JavaScript 
18
2.1. Прототипное наследование встроенных объектов 
18
2.2. Операторы instanceof и typeof 
25
2.3. Свойство __proto__ и метод getPrototypeOf() 
28
2.4. Прототипное наследование пользовательских объектов 
29
Контрольные вопросы 
30

Глава 3. Same Origin Policy. Эксперименты с кроссдоменным 
взаимодействием 
32
3.1. Эксперименты с Same Origin Policy 
32
3.2. Понятие Same Origin Policy 
35
3.3. Кроссдоменные запросы не из скрипта 
37
3.4. Кроссдоменные запросы: Ajax‑запросы и CORS 
39
3.5. Методы обхода и ослабления Same Origin Policy 
56

3.6. Дополнение. Листинги с исходным кодом 
65
Контрольные вопросы 
69

Глава 4. Веб‑сервисы 
71
Контрольные вопросы 
75

Глава 5. Фреймворк Express 
76
5.1. Быстрый старт 
76
5.2. Маршрутизация 
80
5.3. Использование промежуточных обработчиков 
94
5.4. JSON и AJAX 
105
5.5. Шаблонизаторы 
108
Контрольные вопросы 
120

Глава 6. Интеграция фреймворка Express и MongoDB 
121
6.1. Начало работы с MongoDB 
121
6.2. Взаимодействие с MongoDB из Node.js 
124
Контрольные вопросы 
129

Библиографические ссылки 
131

ПРЕДИСЛОВИЕ

Учебное пособие «Разработка программных комплексов на язы‑
ке JavaScript» написано авторами на основе опыта чтения курса «Web 
и DHTML» в Уральском федеральном университете. Цель учебного 
пособия —  изучение объектно‑ориентированного программирова‑
ния на JavaScript и прототипного наследования, Same Origin Policy 
и методов релаксации тех жестких ограничений, которые данная 
политика накладывает, а также знакомство с фреймворком Express.
Учебное пособие призвано помочь студентам в освоении курса 
«Web и DHTML» и отражает его структуру. Пособие разбито на 
главы. Каждая глава соответствует рассматриваемой на занятиях 
теме и содержит необходимые теоретические сведения, примеры, 
всесторонне иллюстрирующие теорию, и иногда листинги программ. 
Кроме того, в конце глав приводятся вопросы для самоконтроля.
При подготовке учебного пособия авторы в основном обраща‑
лись к первоисточникам, т. е. к официальным стандартам и доку‑
ментации.
Работа выполнена в рамках исследований Уральского матема‑
тического центра.

Глава 1   
ОСНОВНЫЕ ПОНЯТИЯ  
И ИСТОРИЯ ЯЗЫКА JAVASCRIPT

1.1. Краткая история появления языка JavaScript: 
причины и предпосылки

Необходимо понимать, что языки программирования создаются 
в контексте определенных исторических реалий, и нужна достаточно 
сильная мотивация для разработки нового языка. Разработчики 
языка ставят перед собой вполне конкретные цели, а это, в свою 
очередь, определяет возможности языка, реализуемые в нем пара‑
дигмы. В связи с этим мы дадим историческую справку о появлении 
и развитии языка JavaScript, а потом охарактеризуем его в общем 
и целом.
Начало 1990‑х гг. ознаменовано бурным развитием Интернета 
и особенно World Wide Web. Разработчики браузеров (на тот мо‑
мент было два основных браузера —  Internet Explorer и Netscape 
Navigator) старались сделать свои продукты более продвинутыми, 
реализовать в них поддержку новых возможностей и тем самым 
вытеснить конкурентов и завоевать рынок. Выполнение в браузере 
программного кода было одной из таких возможностей. Что про‑
исходило в мире IT в то время?
В 1992 г. компания Nombas начала разработку скриптового языка 
Cmm (Си‑минус‑минус), который, по замыслу разработчиков, дол‑
жен был стать достаточно мощным, чтобы заменить макросы, со‑
храняя при этом схожесть с Си, чтобы разработчикам не составило 

большого труда изучить его. Главным отличием от Си была работа 
с памятью. В новом языке все управление памятью осуществлялось 
автоматически: не было необходимости создавать буферы, объяв‑
лять переменные, осуществлять преобразование типов. В остальном 
языки походили друг на друга: в частности, Cmm поддерживал 
стандартные функции и операторы Си. Cmm был переименован 
в ScriptEase, поскольку исходное название звучало слишком нега‑
тивно, а упоминание в нем Си отпугивало людей.
На основе этого языка был создан проприетарный продукт 
CEnvi. В конце ноября 1995 г. Nombas разработала версию CEnvi 
для внедрения в веб‑страницы. Страницы, которые можно было из‑
менять с помощью скриптового языка, получили название Espresso 
Pages —  они демонстрировали использование скриптового языка для 
создания игры, проверки пользовательского ввода в формы и созда‑
ния анимации. Espresso Pages позиционировались как демоверсия, 
призванная помочь представить, что случится, если в браузер будет 
внедрен язык Cmm. Работали они только в 16‑битовом Netscape 
Navigator под управлением Windows.
Таким образом, идея, что браузер должен поддерживать язык 
программирования, встраиваемый в HTML‑код страницы, витала 
в IT‑сообществе; язык JavaScript создавался не на пустом месте.
В апреле 1995 г. компания Netscape поставила перед Бренданом 
Эйхом задачу —  внедрить в браузер Netscape поддержку языка про‑
граммирования. Анонс JavaScript представителями Netscape и Sun 
состоялся накануне выпуска второй бета‑версии Netscape Navigator.
В июле 1996 г. компания Microsoft выпустила аналог языка Java‑
Script, названный JScript. Первым браузером, поддерживающим эту 
реализацию, был Internet Explorer 3.0.
По инициативе компании Netscape была проведена стандар‑
тизация языка ассоциацией ECMA. Стандартизированная версия, 
описываемая стандартом ECMA‑262, имеет название ECMAScript. 
Первой версии спецификации соответствовал JavaScript версии 1.1, 
а также язык JScript.

1.2. Тезаурус  
(основные понятия и связи между ними)

Прежде чем переходить к описанию языка JavaScript, необходимо 
дать базовые определения и установить связи между ними. Дело 
в том, что в учебниках и особенно в электронных ресурсах зача‑
стую имеет место смешение и/или подмена понятий, что вызывает 
немалую путаницу.
В этом разделе будут указаны семантические отношения между 
терминами. Это позволит выявить смысл терминов не только с по‑
мощью определений, но и посредством их соотнесения с другими 
понятиями и их группами. В свою очередь, специальная терминоло‑
гия должна способствовать правильной лексической, корпоративной 
коммуникации (общению и взаимодействию лиц, связанных одной 
дисциплиной или профессией).
Язык JavaScript, спецификация —  описание языка, разрабо‑
танного в компании Netscape. Существует в виде формального 
документа, который, в частности, разъясняет существующие типы 
данных, зарезервированные слова языка, их синтаксис и семантику. 
Язык JavaScript развивался, были выпущены новые релизы, где были 
добавлены дополнительные языковые возможности (например, 
стрелочные функции, блочные области видимости и т. д.).
На JavaScript можно написать программный код, однако чтобы 
этот код выполнить, необходимо наличие программы‑интерпре‑
татора JavaScript‑кода. Таким образом, наряду со спецификацией 
языка существует еще реализация языка —  программа, которая 
умеет прочитывать код, написанный на JavaScript, и выполнять его 
(см. движок JavaScript).
Название JavaScript является зарегистрированной торговой 
маркой.
Язык JScript, спецификация —  описание языка, разработан‑
ного в компании Microsoft. Далее можно повторить все, что было 
выше написано про JavaScript. Поскольку идея Netscape выполнять 
скрипты на веб‑страницах оказалась привлекательной, компания 
Microsoft также реализовала эту идею в своих браузерах.

Слово «JavaScript» является зарегистрированной торговой мар‑
кой, а потому во избежание юридических конфликтов корпорация 
Microsoft должна была придумать иное название для своего языка, 
который почти идентичен языку JavaScript.
Отметим, что первые релизы JavaScript и Jscript состоялись 
до выхода документации ECMAScript.
Как JavaScript, так и Jscript на момент их публикации были «кор‑
поративными» стандартами, т. е. не были утверждены независимыми 
организациями по стандартизации, такими, например, как ISO, IETF 
или ECMA. По инициативе компании Netscape была проведена стан‑
дартизация языка ассоциацией ECMA. Стандартизированная версия 
имеет название ECMAScript, описывается стандартом ECMA‑262.
ECMAScript, спецификация —  описание языка, возникшего 
на основе нескольких технологий, самыми известными из которых 
являются языки JavaScript и JScript. Разработка первой редакции 
спецификации началась в ноябре 1996 г. Принятие спецификации 
состоялось в июне 1997 г. Язык ECMAScript стандартизирован ме‑
ждународной организацией ECMA в спецификации ECMA‑262; 
эта же организация занимается поддержкой и развитием языка.
Как указано в [1], «ECMAScript is based on several originating 
technologies, the most well‑known being JavaScript (Netscape) and 
JScript (Microsoft). The language was invented by Brendan Eich at Net‑
scape and first appeared in that company’s Navigator 2.0 browser. It has 
appeared in all subsequent browsers from Netscape and in all browsers 
from Microsoft starting with Internet Explorer 3.0». Приведем перевод 
этого фрагмента. Язык ECMAScript основан на нескольких орига‑
нальных технологиях, наболее известными из которых являются 
JavaScript (Netscape) и JScript (Microsoft). Язык был предложен Брен‑
даном Эйхом из компании Netscape, впервые появился в ее браузере 
Navigator 2.0. Этот язык входил также в состав всех последующих 
браузеров компании Netscape и всех браузеров компании Microsoft, 
начиная с Internet Explorer 3.0.
ECMAScript —  это абстрактное описание языка, существую‑
щее только на бумаге. Изначально ECMAScript возник на основе 
JavaScript или JScript как попытка их стандартизации, и авторы 
стандарта стремились соответствовать реализациям. Теперь, наобо‑

рот, стандарт развивается относительно самостоятельно, а авторы 
реализаций (наиболее известными из которых являются JavaScript 
и JScript) стремятся соответствовать стандарту.
Реализации JavaScript и JScript, которые также называют расши‑
рениями языка, не на 100 % совместимы со стандартом ECMAScript.
Движок JavaScript —  программа, которая выполняет JavaScript‑ 
код. Может быть реализована как традиционный интерпретатор 
или как just in time (на лету, во время исполнения) компилятор.
Когда мы говорим о реализации стандарта ECMAScript, мы го‑
ворим, во‑первых, о движке, реализующем стандарт, а во‑вторых, 
о возможных проприетарных расширениях языка.
К компетенции движков относятся вопросы оптимизации, ско‑
рости выполнения кода, расхода оперативной памяти и т. д. Суще‑
ствуют реализации движков под Windows, Linux, MacOS, а специ‑
фикаций под Windows, Linux нет —  спецификация одна.
Приведем примеры движков:
1) SpiderMonkey —  самый первый движок JavaScript, созданный 
Бренданом Эйхом в Netscape Communications;
2) Rhino, разрабатываемый Mozilla Foundation движок JavaScript 
с открытым исходным кодом, полностью написанный на Java;
3) V8‑движок, разработанный датским отделением компании 
Google.
Среда выполнения —  программная платформа, окружение, 
в котором работает движок JavaScript.
Начиная писать первые программы на JavaScript, мы используем 
console.log или setTimeout, однако в стандарте языка ничего этого 
не описано. Соответственно, движок JavaScript этих функций и/или 
объектов не знает. Возникает вопрос: а как же это тогда работает? 
Дело в том, что программный код на JavaScript исполняется в среде 
выполнения, наиболее распространенной средой являются веб‑
браузер и Node.js. Среда выполнения предоставляет определенные 
API и объекты среды, которые могут быть использованы движком.
Как указано в документации [1], ECMAScript представляет собой 
объектно‑ориентированный язык программирования, предназ‑
наченный для проведения вычислений с объектами и управления 
этими объектами в среде выполнения.

В соответствии с определением, приведенным в этом документе, 
язык ECMAScript не предназначен для использования в качестве 
самодостаточной вычислительной системы, и в спецификации даже 
отсутствуют средства для ввода внешних данных или вывода ре‑
зультатов вычислений. Однако предполагается, что именно среда 
выполнения предоставит программе на языке ECMAScript не только 
объекты и иные средства, описанные в спецификации, но и не‑
которые объекты, определяемые конкретной средой. Описание 
и поведение этих объектов не является предметом спецификации 
ECMA‑262, однако необходимо отметить, что упомянутые объекты 
могут предоставлять определенные свойства, к которым можно 
обратиться из программы, написанной на ECMAScript, и определен‑
ные функции, которые можно вызвать из программы на ECMAScript.
Изначально ECMAScript задумывался как язык веб‑скриптов, 
обеспечивающий механизм, позволяющий оживлять интернет‑
страницы браузеров и производить вычисления на стороне сер‑
вера в рамках архитектуры клиент–сервер. На сегодняшний день 
ECMA Script может предоставлять основные скриптовые возмож‑
ности для множества сред выполнения, поэтому спецификация 
языка определяется без привязки к какой‑либо конкретной среде.
Разберем две наиболее популярные среды выполнения.
Веб‑браузер предоставляет среду выполнения ECMAScript для 
вычислений, производимых на стороне клиента, например, объекты, 
представляющие окна, меню, всплывающие окна, диалоговые окна, 
текстовые поля, привязки, фреймы, историю посещений страниц, 
cookies‑файлы, а также ввод и вывод информации. Кроме того, среда 
выполнения предоставляет средства для подключения скриптового 
кода к таким событиям, как изменение фокуса, загрузка страни‑
цы и изображения, выход со страницы, ошибка и отмена, выбор, 
отправка формы, действия мышью. Скриптовый код появляется 
внутри HTML‑кода, а отображаемая страница представляет собой, 
с одной стороны, сочетание элементов пользовательского интер‑
фейса, а с другой стороны —  текста и изображений, как статичных, 
так и вычисленных. Скриптовый код реагирует на действия поль‑
зователя, поэтому потребность в основной программе отсутствует.

Веб‑сервер предоставляет другую среду выполнения для вы‑
числений, производимых на стороне сервера, включая объекты, 
представляющие запросы, клиентов и файлы, а также механизмы 
для блокировки и совместного использования данных.
Благодаря использованию одновременно скриптов на стороне 
браузера и на стороне сервера можно распределить вычисления 
между клиентом и сервером и при этом обеспечить персонализи‑
рованный пользовательский интерфейс для веб‑приложения.
Вообще говоря, каждый веб‑браузер и сервер, поддерживающий 
ECMAScript, предоставляет свою собственную среду выполнения, 
дополняя среду выполнения языка ECMAScript.
Среда выполнения определяет не только API и объекты среды, 
но и контекст безопасности. Скрипты, загруженные из Интернета 
и исполняемые в браузере, должны обладать весьма ограниченным 
набором прав, в частности, не должны иметь доступ к жесткому 
диску пользователя.
В приведенном выше описании попутно были введены понятия 
API среды выполнения и объект среды выполнения.
Бразуер —  прикладное программное обеспечение для просмотра 
веб‑страниц, содержания веб‑документов, управления веб‑прило‑
жениями, а также для решения других задач. В Глобальной сети 
браузеры используют для запроса, обработки, манипулирования 
и отображения содержания веб‑сайтов.
В контексте данного изложения на браузер нужно смотреть 
как на платформу (среду выполнения) и, соответственно, необхо‑
димо разделить понятие «браузер», «браузерный движок» и «дви‑
жок JavaScript». Как правило, браузер имеет браузерный движок, 
занимающийся отрисовкой страниц, и движок JavaScript; такая 
декомпозиция упрощает тестирование, переиспользование или 
использование в других проектах.
Браузерный движок (англ. layout engine) представляет собой про‑
грамму, преобразующую содержимое веб‑страниц (файлы HTML, 
XML, цифровые изображения и т. д.) и информацию о форматиро‑
вании (в форматах CSS, XSL и т. д.) в интерактивное изображение 
форматированного содержимого на экране. Браузерный движок 
обычно используется в веб‑браузерах (отсюда название), но может 

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