JavaScript Основы. Что нужно знать? Широко используемая технология и число прецедентов её применения растёт – Web-page, AJAX, Web 2.0 – Увеличение числа.

Презентация:



Advertisements
Похожие презентации
Лекция 4 Объекты. Типы объектов ТипПример Источник реализации Регламентирующи й стандарт Пользовательский Определенные пользователем объекты Student или.
Advertisements

Язык JavaScript Скриптовый язык для выполнения на html-страницах.
CERN – European Organization for Nuclear Research IT Department – e – Business Section Прошлое, настоящее и будущее JavaScript Дж. Дрансфилд, Р. Титов.
Практическое занятие 6. Функции. Большинство языков программирования используют понятия функции и процедуры. C++ формально не поддерживает понятие процедуры,
Объектная модель в JavaScript Объектная модель в языке JavaScript основана на прототипах в противоположность объектной модели, основанной на классах.
Онлайн курс «Web разработка на базе ASP.NET MVC» на study.smarly.netstudy.smarly.net Работа с JavaScript в браузере Первый взгляд Переменные и типы Функции.
WEB- ТЕХНОЛОГИИ Лекция 5. Традиционное Web- программирование 1.
JavaScript прототипно-ориентированный сценарный язык программирования, разработанный 1995 году в Netscape, Брендом Аком.
Язык Ruby Денис С. Мигинский. Ruby Создан Юкихиро Мацумото в 1995 г. В основу положены элементы языков Perl, Python, Lisp, Smalltalk и др., а также «принцип.
Разгони свой сайт Лекция 8: Быстрый JavaScript Мациевский Николай 1 / 24 webo.in.
Ненавязчивый Unobtrusive JavaScript Сергеев Алексей «Открытые Веб-Технологии»
Ресурсы WPF Два типа ресурсов WPF: объектные ресурсы (object resource) – определенный.NET-объект, который можно использовать многократно; ресурсы сборки.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Особенности языка JavaScript и его использования.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Богданов Марат Робертович Современные веб-технологии. Подробный курс Введение в язык программирования JavaScript.
Лекция 2 Типы данных и переменные. Слабый контроль типов Пример: var favNumber; favNumber = 3; favNumber = "Сан-Диего";
Существует три разновидности комментариев: комментарии в одной строке, комментарии в нескольких строках, комментарии для документирования. Комментарии,
JavaScript Лекция 8. JavaScript JavaScript - новый язык для составления скриптов, разработанный фирмой Netscape. С помощью JavaScript можно легко создавать.
Транксрипт:

JavaScript Основы

Что нужно знать? Широко используемая технология и число прецедентов её применения растёт – Web-page, AJAX, Web 2.0 – Увеличение числа приложение имеющих Web- интерфейс Интересные и необычные особенности – Каждая функция это объект – У объектов нет классов – Широкие возможности изменения поведения объектов Немного необычно Интересно Очень необычно

Много проблем с безопасностью Нет статических типов – типы и переменные могут меняться во время работы программы Сложно предсказать поведение программы заранее

Возможности изменения поведения объектов Всегда можно добавить новое поле объекту

Возможности изменения поведения объектов Всегда можно добавить новый метод объекту

Возможности изменения поведения объектов Вызвать функцию от имени объекта

История JavaScript Разработан Брендан Айк (Brendan Eich) в компании Netscape – Скриптовый язык для Navigator 2 Позже стандартизирован для браузерной совместимости – ECMAScript Editor 3 (JavaScript 1.5) Связан с Java только по названию – Название было маркетинговым ходом Доступные версии JavaScript – Spidermonkey – Rhino – V8 – …

Мотивации к созданию JavaScript Netscape 1995 – Занимает 90% рынка браузеров – Возможность сделать скрипты для HTML Потребности к использованию JavaScript – Проверка форм – Украшение и специальные эффекты на страницах – Динамическая манипуляция с контентом – Исполнение некоторых действий на машинах клиентов

Пример (вычисления) … … var num1, num2, sum num1 = prompt("Enter first number") num2 = prompt("Enter second number") sum = parseInt(num1) + parseInt(num2) alert("Sum = " + sum) …

Пример (события) function whichButton(event) { if (event.button==1) { alert("You clicked the left mouse button!") } else { alert("You clicked the right mouse button!") } … … Другие возможные события: onLoad, onMouseMove, onKeyPress, onUnLoad, …

Пример работы со страницей Возможности – createElement(elementName) – createTextNode(text) – appendChild(newChild) – removeChild(node) Пример добавления нового маркированного списка: var list = document.getElementById('list1'); var newitem = document.createElement('li'); var newtext = document.createTextNode(text); list.appendChild(newitem); newitem.appendChild(newtext); Этот скрипт изменяет DOM

Цели Сделать простой процесс copy/paste полезных участков кода Терпеть незначительные ошибки (нет точки с запятой) Простой процесс обработки событий (onclick, onmousedown, …) Возможност выбора парадигмы: – Процедурная абстракция – ООП через прототипы

База языка Чувствительность к регистру – A и a разные идентификаторы Выражения (statements) оканчиваются или возвращением значения или (;) – x=x+1; тоже что и x=x+1 – Точку с запятой лучше ставить для уменьшения числа ошибок Блок – Группа выражений – {…} – Не выделяет отдельное пространство имен (scope) Переменные – Определение переменных с использованием var – Определение без слова var обязывает установить значение при первом использовании При таком определении переменная будет иметь глобальную область видимости

Как можно этим воспользоваться V8 Event loop – Вводим выражение – Прерывается выполнение event-loop – Отображается значение – Продолжается выполнение event-loop Пример

JavaScript блок Для группировки, но не отделяет пространство имён Не блок в смысле других языков программирования – Только вызов функции и выражение with отделяет область видимости

JavaScript типы Boolean – Два значения true и false Number – 64-битное число с плавающей точкой, похоже на java double и Double – Нет целочисленного типа – Специальные значения NaN (Not a Number), Infinity String – Последовательность 0 или больше символов Unicode – Нет типа символ, только строки длиной 1 – Литерал строки отделяется либо () либо () кавычкой Специальные значения – null и undefined – typeof(null) = object – typeof(undefined) = undefined

Объекты Объекты это именованные коллекции – Проще всего представить в виде ассоциированного массива – Можно определить множество пар имя-значение objBob = {name: Bob", grade: 'A', level: 3}; – Новое свойство может быть добавлено в любое время objBob.fullname = 'Robert'; – Методы могут ссылаться на this Массивы и функции тоже объекты – Свойствами объекта могут быть функции – Функции это те же объекты с методом () function max(x,y) { if (x>y) return x; else return y;}; max.description = return the maximum of two arguments;

Функции В теле функции могут быть – Локальные переменные – Вложенные (inner) функции Передача параметров – Базовые типы передаются по значению, объекты по ссылке Вызов функции можно сделать с любым числом аргументов – functionname.length – число определённых аргументов – functionname.arguments.length – число аргументов с которыми была вызвана функция

Функции Анонимные функции (выражение из функции) – (function (x,y) {return x+y}) (2,3); Замыкания и функции возвращающие функции – function CurAdd(x){ return function(y){return x+y} }; Анонимные функции могут быть функциями обратного вызова (callback) – setTimeout(function() { alert("done"); }, 10000)

Функции Функции возвращающие функции function CurriedAdd(x){ return function(y){ return x+y} }; g = CurriedAdd(2); g(3) Переменное число аргументов function sumAll() { var total=0; for (var i=0; i< sumAll.arguments.length; i++) total+=sumAll.arguments[i]; return(total); } sumAll(3,5,3,5,3,2,6)

Использование анонимных функций Анонимные функции широко применяются как функции обратного вызова setTimeout(function() { alert("done"); }, 10000) // putting alert("done") in function delays evaluation until call Модно сделать блок с отделённым пространством имен var u = { a:1, b:2 } var v = { a:3, b:4 } (function (x,y) { var tempA = x.a; var tempB =x.b; //local variables x.a=y.a; x.b=y.b; y.a=tempA; y.b=tempB }) (u,v) // Объекты здесь передаются по ссылке

Лямбда выражения Выражение – x + yx + 2y + z Функции – x.(x + y) z.(x + 2y +z) Приложение – x.(x + y)(3)= 3 + y – z.(x + 2y +z)(5)=x + 2y + 5

Порядок выполнения Отдаём функцию f, получаем суперпозицию f o f – f. x. f(f x) Как это должно работать

Те же процедуры в синтаксисе Lisp Отдаём функцию f, получаем суперпозицию f o f (lambda (f) (lambda (x) (f (f x)))) Как это работает ((lambda (f) (lambda (x) (f (f x)))) (lambda (y) (+ y 1)) = (lambda (x) ((lambda (y) (+ y 1)) ((lambda (y) (+ y 1)) x)))) = (lambda (x) ((lambda (y) (+ y 1)) (+ x 1)))) = (lambda (x) (+ (+ x 1) 1))

Тоже в JavaScript Отдаём функцию f, получаем суперпозицию f o f Как это должно работать function (f) { return function (x) { return f(f(x)); }; } (function (f) { return function (x) { return f(f(x)); };)(function (y) { return y +1; }) function (x) { return ((x + 1) + 1); }

Особенности использования объектов Использование функции – конструктора Объект имеет прототип, который можно изменить function car(make, model, year) { this.make = make; this.model = model; this.year = year; } var c = new car(Ford,Taurus,1988); car.prototype.print = function () { return this.year + + this.make + + this.model; } c.print();

Особенности this в JavaScript var x = 5; var y = 5; function f() { return this.x + y; } var o1 = {x : 10} var o2 = {x : 20} o1. g = f; o2. g = f; o1.g() o2.g() Оба свойства o1. g и o2. g ссылаются на одну и туже функцию, но результаты её выполнения разные ?

Ещё о this В большинстве случаев this указывает на объект который содержит функцию как метод Пример this разрешится динамически во время исполнения метода var o = { x : 10, f : function(){ return this.x } o.f();

Особенности для вложенных методов var o = { x: 10, f : function() { function g(){ return this.x }; return g(); } }; o.f() Функция g взмёт глобальный объект как this! (Обычно это window)

Особенности закреплённые в стандарте Управляемый стек памяти для функций – Параметры функций и локальные переменные Сборщик мусора (Garbage collector) – Автоматическое освобождение памяти Замыкания Исключения Объектная модель – Динамическое расширение, инкапсуляция и наследование через прототипы Много поточность – Можно делать одновременно несколько задач (JavaScript – всегда однопоточный)

Управляемый стек памяти Локальные переменные существуют только внутри функции function f(x) { var y = 3; function g(z) { return y+z; }; return g(x); } var x= 1; var y =2; f(x) + y;

Сборщик мусора Постраничное управление памятью – Память освобождается при смене страницы Подсчёт ссылок – Каждая область памяти ассоциирована с числом ссылок на неё – Число пересчитывается при смене указателя – Память очищается когда число становится равным 0 Пометить и смести (mark-and-sweep) – GC помечает память – Собирает и вычищает неиспользуемую память

Замыкания Возвращение функции из вызова функции Можно использовать для создания private полей – function f(x) { var y = x; return function (z){ y += z; return y; } var h = f(5); h(3);

Исключения Выкидываем исключение throw "Error2"; throw 42; throw {toString: function() { return "I'm an object!"; } }; Ловим try { } catch (e if e == FirstException") { // do something } catch (e if e == SecondException") { // do something else } catch (e){ // executed if no match above }

Особенности объектов Динамическое расширение – Значения свойств определяются в момент выполнения (run-time) Инкапсуляция – Объекты могут содержать управляющие конструкции и приватные данные Полиморфизм – Одни объекты могут быть использованы вместо других Наследование – Через прототипы

Многопоточность (Concurrency) Сам по себе JavaScript однопоточный AJAX предоставляет возможность конкуренции – Создаём XMLHttpRequest и устанавливаем функцию обратного вызова – Исполняем запрос и дальше всё работает асинхронно – Ответ от удалённого сервера вызывает функцию обратного вызова Событие ждёт своей очереди в общем цикле исполнения Другая форма многопоточности – Использование setTimeout для исполнение нескольких задач

eval Вычисляет строку кода – Строка JavaScript кода вычисляется в пространстве имён вызывающего кода Пример var code = "var a = 1"; eval(code); // a теперь '1 var obj = new Object(); obj.eval(code); // obj.a теперь 1 Наиболее частое применение – Быстро обрабатывает JSON полученный через AJAX Чего стоит иметь eval в языке – Представьте eval в C. Как его можно реализовать?

Необычные особенности Встроенные функции – eval, проверка типа во время исполнения Регулярные выражения – Поддержка синтаксисом языка Динамическое расширение объектов Интегрирование по методам в объекте for (variable in object) { statements } Выражение with – with (object) { statements }

Ресурсы Brendan Eich, slides from ICFP conference talk – Tutorial – (still there?) JavaScript 1.5 Guide – _1.5_Guide Douglas Crockford site – – JavaScript/