SlideShare ist ein Scribd-Unternehmen logo
1 von 47
JavaScript
Дмитрий Смаль
Синтаксис
JavaScript
●
Скриптовый
●
Динамически типизированный
●
Прототипный
●
Поддержка функционального
программирования
●
Функции – объекты первого рода
●
Диалект ECMAScript
●
Другие диалекты (JScript, ActionScript)
Основы синтаксиса
var _true = true; // O, Realy ?
if (a < b) return 1
for (i = 0; i < arr.length; i++) {
arr[i] += 1;
}
try {
throw 'test';
}
catch (e) {
console.log(e)
}
Объявления переменных
var a = 10, b = 20;
window.x = 30;
Типы переменных:
a = 1; b = 1.1; // Number – числовой
str = 'hello' // String – строковы
b = true; // Boolean – логический
obj = {}; arr = []; // Object – объекты
f = function () {
return 1
} // функции – объекты
null и undefined – специальные значения,
отдельные типы
JSON
[] - массив,
{} - объект, словарь, хэш
var rata = {
'result': true,
'message': 'hello world',
'ids': [1, 2, 33, 100500],
'actors' : [
{ 'name' : 'Peter', 'age' : 30 },
{ 'name' : 'David', 'age' : 35 }
]
};
Функции
function doSomething(a, b, c) {
. . .
}
var doSomething = function(a, b, c) {
. . .
}
function addHandler(obj, msg) {
function say() {
alert(msg)
}
obj.addEventListener('click', say);
}
Область видимости
// quiz 1
function doSomething(a, b, c) {
if (!x) {
var x = 5;
}
alert(x);
}
// quiz 2
funcs = [];
for (var i = 0; i < 10; i++) {
funcs[i] = function() { alert(i) };
}
funcs[3]();
Замыкания
function hideButNotNow(id, timeout) {
var elem = document.getElementById(id);
setTimeout(function() {
elem.style['display'] = 'none';
}, timeout);
}
hideButNotNow('mybtn', 1000)
hideButNotNow('mybtn2', 2000)
hideButNotNow('mybtn3', 3000)
Замыкание = функция + ее лексическое окружение на
момент создания
Стандартные объекты
Math – станадртные математические операции,
специальные типы Infinity и NaN
String – работа со строками, поиск, доступ по индексу,
строки – immutable
RegExp – работа с регулярными выражениями,
search/match/replace, RegExp.$1
Date – работа с датой и временем, UTC, таймзоны, простая
арифметика
Function – гибкие возможности по вызову функций
!! Глобальный объект !!
Client-Side JS
Где может находиться ?
<script src=”/js/jquery.js”></script>
<script type=”text/script”>
alert('hello there!');
</script>
<a href=”javascript:alert(1)”>CLICK</a>
<a href=”#” onclick=”alert(1)”>PUSH</a>
<div onmouseover=”$(this).fadeOut()”>...
<form onsubmit=”return validate(this)”>...
Порядок выполнения
1) Исполняется сразу при загрузке страницы, в порядке
подключения
2) JS код добавляет обработчики событий
3) … либо устанавливает таймеры
4) Обработчики событий вызываются асинхронно
Простейшие функции
document.write('Hello'); // вывод HTML
alert('Ooops'); // Сообщение об.. успехе
if (сonfirm('Точно уверен?')) // Подтверждение
<a href=”/delete?id=3”
onclick=”confirm('Точно удалить?')”>DEL</a>
prompr('Введите что-то'); // запрос данных
el = document.getElementById('content');
el.innerHTML = '<div>Hello</div>';
API браузера
window – текущее окно (глобальный объект)
document – представляет текущий документ, используется для работы
со структурой HTML
location – текущий URL страницы, позволяет работать с отдельными
частями URL, изменение location – переход по URL
history – объект для работы с историей страниц, позволяет переходить
назад и вперед
navigator – содержит информацию о браузере и операционной
системе
cookie – получение и установка куки
screen – информация о размерах экрана
Не зависящий от языка и платформы интерфейс для доступа
к содержимому XML, HTML и XHTML
DOM
DOM0 (традиционный)
document.forms[0].elements[0]
document.formName.inputName
document.anchors // массив якорей
document.images // массив картинок
document.all // только в IE
onclick=”...” // обработчики событий
onsubmit=”...”
DOM1
DOM1
DOM1
Node – базовый класс: type, appendChild, removeChild,
insertBefore, insertAfter, parentNode, firstChild, childNodes,
nextSibling, previousSibling
Document – главный, корневой Node: createElement,
createTextNode, createAttribute, getElementsByTagName,
getElementById(*), getElementsByName(*)
Element – Node, являющийся тэгом: getAttribute, setAttribute,
removeAttribute, getElementsByTagName
Attr – Node, являющийся аттрибутом: name, value
Text – Node, являющиеся фрагментом текста
Как использовать DOM
table = document.getElementById('tab1');
tb = table.getElementsByTagName('tbody')[0];
row = tb.lastChild;
newRow = row.cloneNode();
tb.appendChild(newRow);
tds = newRow.getElementsByTagName('td');
for (var i = 0; i < tds.length; i++) {
children = td[i].childNodes;
for (var j = 0; j < children.length; j++) {
td[i].removeChild(children[j]);
}
}
События
Типы событий:
click (mousedown, mouseup)
keypress (keydown, keyup)
mouseover (mousein, mouseout)
change, submit
Аттрибуты событий:
Тип
Элемент
Доп. информация (время, координаты, кнопка)
Всплывание (bubbling)
Действия по-умолчанию: a – переход по ссылке, form – отправка
формы и т.д.
<html>
<p>
Hello world
<a href=”#”>
CLCK
</a>
</p>
</html>
Обработчики событий
<a href=”#”
onclick=”alert(1); return false”>CLCK</a>
<script>
a = document.getElementById('the_a');
a.addEventListener('click', function(ev) {
alert('clicked on ' + ev.target);
alert('now on ' + this);
alert('x ' + ev.clientX);
alert('y ' + ev.clientY);
ev.stopPropagation(); // не всплывать!
ev.preventDefault(); // без умолчания!
});
</script>
Asynchronous Javascript And XML
AJAX
AJAX
Обычный HTTP запрос
Асинхронный запрос
Преимущества AJAX
●
Не блокирует интерфейс
●
Сокращает время загрузки страницы
●
Уменьшает сетевой трафик
●
Уменьшает нагрузку на сервер
XHR – пример использования
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', '/xhr/test.html', true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
alert(xmlhttp.responseText);
} else {
alert('error' + xmlhttp.status);
}
}
};
xmlhttp.send(null);
“Запрос”
<script src=”/load.js?id=3&callback=func”>
</script>
“Ответ”
func({ 'res' : 'ok', . . . });
Ограничения AJAX
●
Невозможно загружать файлы
(решение: iframe)
●
Работает только в своем домене
(решение: JSONP)
obj.addEventListener('click', function(ev) {
. . .
}); // FF, Chrome, Opera
abj.attachEvent('onclick', function() {
var ev = window.event;
}); // IE
xhr = new XMLHttpRequest(); // FF
xhr = ActiveXObject("Msxml2.XMLHTTP"); // IE
(Не)переносимость JavaScript
JavaScript библиотеки
jQuery
jQuery, $ - точка входа
$(document), $(this), $('a.btn'), $($('div'))
$('div') – nodeset, “унаследован” от массива
$('div').filter(':even').addClass('blue')
.addpend('body').fadeOut('slow');
$(document.window).width()
$('#mylink').attr('href')
jQuery - основы
Стандартные:
.clazz #id div > + ,
Расширенные:
input:radio // “сокращения”
input:checked // только отмеченные checkbox
span:visible // только видимые span
li:nth(n) // n-ый в выборе
li:nth-child(n) // n-ый потомок
p:eq(n) // n+1 ый параграф
p:gt(n) // параграфы, начиная с n+1 ого
p:not(.special) // параграфы без класса special
p:has(a.mylink) // только содержащие a.mylink
jQuery - селекторы
$(...).find('input[name=age]') // поиск вниз
$(...).children('.nice') // потомки
$(...).parent() // родитель
$(...).closest('.containter') // поиск вверх
$(...).siblings() // “соседи”
$(...).next() $(...).nextAll()
$(...).prev() $(...).prevAll()
$(...).filter(':checked') // фильтрация
$(...).each(function(id) { // итерация
alert(this)
})
jQuery - traversing
$(...).appendTo('.another')
$(...).insertBefore('.smth')
$(...).remove()
$(...).clone()
$(...).replaceWith()
$(...).wrap()
$(...).html('<h1>hello</h1>')
$(...).text('plain text')
$(...).attr('href') $(...).attr('href', x)
$(...).addClass('some')
$(...).removeClass('some')
jQuery – работа с DOM
AddClass / removeClass / hasClass / toggleClass
$(...).height() // высота
$(...).width() // ширина
$(...).position() // смещение от родителя
$(...).offset() // абсолютное смещение
{'left':10, 'top':20}
$(...).css('float')
$(...).css('float', 'left')
$(...).css({ left: 10, top: 20 })
Анимация и работа с CSS
$.ajax({
url: '/vote.php',
data: { id: 33, action: 'like' },
success: function (data, status) {
alert('ok: ' + data);
},
error: function (xhr, status) {
alert('fail: ' + status);
}
});
$('#some_div').load('/list.php', { id: 33 });
jQuery AJAX
<a id=”myid” data-mydata=”yep”>CLCK</a>
$('#myid').data('mydata');
$('#myid').data('flag', 'on');
$('a.delete').live(function() {
var $e = $(this);
$.post('/delete/', { id : $e.data('id') });
$e.remove();
});
$(function() { alert('page loaded') });
Полезные мелочи
Плагины jQuery
jquery.modal // диалоговые окна
jquery.validate // валидация данных
jquery.accordion
jquery.slider
jquery.suggest // тысячи их!
jQuery UI
Best Practice
●
Без глобальных переменных!
●
Используйте data- атрибуты для обмена данными
●
Используйте отдельные имена классов
js-login-block, js-login-block-btn
b_login_overlay, b_login_overlay__btn__inner
(function() {
// do some work
})();
JavaScript и конкуренты
Домашнее задание
●
Изучить Class-Based Views и Django Templates
●
Сделать шаблон для отображения списка объектов в
таблице (“Лекции”)
●
Сделать шаблон для отображения одного объекта в
таблице
●
Использовать наследование шаблонов, для исключения
дублирования кода
Спасибо за внимание
Дмитрий Смаль, smal@corp.mail.ru

Weitere ähnliche Inhalte

Was ist angesagt?

Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9Technopark
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному кодуVasiliy Deynega
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеPython Meetup
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Python Meetup
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java scriptNoveo
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseCocoaHeads
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Sergey Schetinin
 
Yii development
Yii developmentYii development
Yii developmentMageCloud
 
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...MageCloud
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptDenis Latushkin
 

Was ist angesagt? (20)

Web весна 2013 лекция 9
Web весна 2013 лекция 9Web весна 2013 лекция 9
Web весна 2013 лекция 9
 
C#. От основ к эффективному коду
C#. От основ к эффективному кодуC#. От основ к эффективному коду
C#. От основ к эффективному коду
 
Decorators' recipes
Decorators' recipesDecorators' recipes
Decorators' recipes
 
Jquery
JqueryJquery
Jquery
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
Очередной скучный доклад про логгирование
Очередной скучный доклад про логгированиеОчередной скучный доклад про логгирование
Очередной скучный доклад про логгирование
 
Javascript
JavascriptJavascript
Javascript
 
Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"Максим Щепелин. "Unittesting. Как?"
Максим Щепелин. "Unittesting. Как?"
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
Влад Ковташ — Yap Database
Влад Ковташ — Yap DatabaseВлад Ковташ — Yap Database
Влад Ковташ — Yap Database
 
Talks on collections
Talks on collectionsTalks on collections
Talks on collections
 
Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование Декораторы в Python и их практическое использование
Декораторы в Python и их практическое использование
 
Yii development
Yii developmentYii development
Yii development
 
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
Профилирование и оптимизация фреймворков высоконагруженных систем на примере ...
 
Объектное и прототипное программирование в Javascript
Объектное и прототипное программирование в JavascriptОбъектное и прототипное программирование в Javascript
Объектное и прототипное программирование в Javascript
 
Perl: Symbol table
Perl: Symbol tablePerl: Symbol table
Perl: Symbol table
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 

Andere mochten auch

Web осень 2012 лекция 5
Web осень 2012 лекция 5Web осень 2012 лекция 5
Web осень 2012 лекция 5Technopark
 
Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3Technopark
 
АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8Technopark
 
Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2Technopark
 
Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Technopark
 
Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Technopark
 
СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5Technopark
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10Technopark
 
Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1Technopark
 
Web весна 2012 лекция 10
Web весна 2012 лекция 10Web весна 2012 лекция 10
Web весна 2012 лекция 10Technopark
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6Technopark
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11Technopark
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2Technopark
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9Technopark
 
СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2Technopark
 
АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3Technopark
 
Java осень 2012 лекция 7
Java осень 2012 лекция 7Java осень 2012 лекция 7
Java осень 2012 лекция 7Technopark
 
Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1Technopark
 
Java весна 2013 лекция 1
Java весна 2013 лекция 1Java весна 2013 лекция 1
Java весна 2013 лекция 1Technopark
 

Andere mochten auch (19)

Web осень 2012 лекция 5
Web осень 2012 лекция 5Web осень 2012 лекция 5
Web осень 2012 лекция 5
 
Web весна 2012 лекция 3
Web весна 2012 лекция 3Web весна 2012 лекция 3
Web весна 2012 лекция 3
 
АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8АиСД осень 2012 лекция 8
АиСД осень 2012 лекция 8
 
Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2Бизнес и системный анализ весна 2013 лекция 2
Бизнес и системный анализ весна 2013 лекция 2
 
Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4
 
Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4
 
СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5СУБД осень 2012 лекция 5
СУБД осень 2012 лекция 5
 
Web осень 2012 лекция 10
Web осень 2012 лекция 10Web осень 2012 лекция 10
Web осень 2012 лекция 10
 
Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1Управление продуктом весна 2014 лекция 1
Управление продуктом весна 2014 лекция 1
 
Web весна 2012 лекция 10
Web весна 2012 лекция 10Web весна 2012 лекция 10
Web весна 2012 лекция 10
 
C++ осень 2012 лекция 6
C++ осень 2012 лекция 6C++ осень 2012 лекция 6
C++ осень 2012 лекция 6
 
C++ осень 2012 лекция 11
C++ осень 2012 лекция 11C++ осень 2012 лекция 11
C++ осень 2012 лекция 11
 
Web осень 2012 лекция 2
Web осень 2012 лекция 2Web осень 2012 лекция 2
Web осень 2012 лекция 2
 
Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2СУБД осень 2012 вестник 2
СУБД осень 2012 вестник 2
 
АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3АиСД осень 2012 лекция 3
АиСД осень 2012 лекция 3
 
Java осень 2012 лекция 7
Java осень 2012 лекция 7Java осень 2012 лекция 7
Java осень 2012 лекция 7
 
Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1Безопасность интернет-приложений осень 2013 лекция 1
Безопасность интернет-приложений осень 2013 лекция 1
 
Java весна 2013 лекция 1
Java весна 2013 лекция 1Java весна 2013 лекция 1
Java весна 2013 лекция 1
 

Ähnlich wie Web осень 2012 лекция 9

Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Dmitry Stropalov
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...solit
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)Smolensk Computer Science Club
 
20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03Computer Science Club
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptConstantin Kichinsky
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?Vasil Remeniuk
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6Dmitry Soshnikov
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey TeplyakovAlex Tumanoff
 

Ähnlich wie Web осень 2012 лекция 9 (20)

Scala
ScalaScala
Scala
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)Scala and LiftWeb presentation (Russian)
Scala and LiftWeb presentation (Russian)
 
C sharp deep dive
C sharp deep diveC sharp deep dive
C sharp deep dive
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
Solit 2014, Реактивный Javascript. Победа над асинхронностью и вложенностью, ...
 
Scala on android
Scala on androidScala on android
Scala on android
 
8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)8 встреча — Язык программирования Python (В. Ананьев)
8 встреча — Язык программирования Python (В. Ананьев)
 
Charming python sc2-8
Charming python sc2-8Charming python sc2-8
Charming python sc2-8
 
20100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-0320100425 model based_testing_kuliamin_lectures01-03
20100425 model based_testing_kuliamin_lectures01-03
 
Scala for android
Scala for androidScala for android
Scala for android
 
Bytecode
BytecodeBytecode
Bytecode
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScript
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6DevConf. Дмитрий Сошников - ECMAScript 6
DevConf. Дмитрий Сошников - ECMAScript 6
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
course js day 2
course js day 2course js day 2
course js day 2
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 

Mehr von Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

Mehr von Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Web осень 2012 лекция 9

  • 4. Основы синтаксиса var _true = true; // O, Realy ? if (a < b) return 1 for (i = 0; i < arr.length; i++) { arr[i] += 1; } try { throw 'test'; } catch (e) { console.log(e) }
  • 5. Объявления переменных var a = 10, b = 20; window.x = 30; Типы переменных: a = 1; b = 1.1; // Number – числовой str = 'hello' // String – строковы b = true; // Boolean – логический obj = {}; arr = []; // Object – объекты f = function () { return 1 } // функции – объекты null и undefined – специальные значения, отдельные типы
  • 6. JSON [] - массив, {} - объект, словарь, хэш var rata = { 'result': true, 'message': 'hello world', 'ids': [1, 2, 33, 100500], 'actors' : [ { 'name' : 'Peter', 'age' : 30 }, { 'name' : 'David', 'age' : 35 } ] };
  • 7. Функции function doSomething(a, b, c) { . . . } var doSomething = function(a, b, c) { . . . } function addHandler(obj, msg) { function say() { alert(msg) } obj.addEventListener('click', say); }
  • 8. Область видимости // quiz 1 function doSomething(a, b, c) { if (!x) { var x = 5; } alert(x); } // quiz 2 funcs = []; for (var i = 0; i < 10; i++) { funcs[i] = function() { alert(i) }; } funcs[3]();
  • 9. Замыкания function hideButNotNow(id, timeout) { var elem = document.getElementById(id); setTimeout(function() { elem.style['display'] = 'none'; }, timeout); } hideButNotNow('mybtn', 1000) hideButNotNow('mybtn2', 2000) hideButNotNow('mybtn3', 3000) Замыкание = функция + ее лексическое окружение на момент создания
  • 10. Стандартные объекты Math – станадртные математические операции, специальные типы Infinity и NaN String – работа со строками, поиск, доступ по индексу, строки – immutable RegExp – работа с регулярными выражениями, search/match/replace, RegExp.$1 Date – работа с датой и временем, UTC, таймзоны, простая арифметика Function – гибкие возможности по вызову функций !! Глобальный объект !!
  • 12. Где может находиться ? <script src=”/js/jquery.js”></script> <script type=”text/script”> alert('hello there!'); </script> <a href=”javascript:alert(1)”>CLICK</a> <a href=”#” onclick=”alert(1)”>PUSH</a> <div onmouseover=”$(this).fadeOut()”>... <form onsubmit=”return validate(this)”>...
  • 13. Порядок выполнения 1) Исполняется сразу при загрузке страницы, в порядке подключения 2) JS код добавляет обработчики событий 3) … либо устанавливает таймеры 4) Обработчики событий вызываются асинхронно
  • 14. Простейшие функции document.write('Hello'); // вывод HTML alert('Ooops'); // Сообщение об.. успехе if (сonfirm('Точно уверен?')) // Подтверждение <a href=”/delete?id=3” onclick=”confirm('Точно удалить?')”>DEL</a> prompr('Введите что-то'); // запрос данных el = document.getElementById('content'); el.innerHTML = '<div>Hello</div>';
  • 15. API браузера window – текущее окно (глобальный объект) document – представляет текущий документ, используется для работы со структурой HTML location – текущий URL страницы, позволяет работать с отдельными частями URL, изменение location – переход по URL history – объект для работы с историей страниц, позволяет переходить назад и вперед navigator – содержит информацию о браузере и операционной системе cookie – получение и установка куки screen – информация о размерах экрана
  • 16. Не зависящий от языка и платформы интерфейс для доступа к содержимому XML, HTML и XHTML DOM
  • 17. DOM0 (традиционный) document.forms[0].elements[0] document.formName.inputName document.anchors // массив якорей document.images // массив картинок document.all // только в IE onclick=”...” // обработчики событий onsubmit=”...”
  • 18. DOM1
  • 19. DOM1
  • 20. DOM1 Node – базовый класс: type, appendChild, removeChild, insertBefore, insertAfter, parentNode, firstChild, childNodes, nextSibling, previousSibling Document – главный, корневой Node: createElement, createTextNode, createAttribute, getElementsByTagName, getElementById(*), getElementsByName(*) Element – Node, являющийся тэгом: getAttribute, setAttribute, removeAttribute, getElementsByTagName Attr – Node, являющийся аттрибутом: name, value Text – Node, являющиеся фрагментом текста
  • 21. Как использовать DOM table = document.getElementById('tab1'); tb = table.getElementsByTagName('tbody')[0]; row = tb.lastChild; newRow = row.cloneNode(); tb.appendChild(newRow); tds = newRow.getElementsByTagName('td'); for (var i = 0; i < tds.length; i++) { children = td[i].childNodes; for (var j = 0; j < children.length; j++) { td[i].removeChild(children[j]); } }
  • 22. События Типы событий: click (mousedown, mouseup) keypress (keydown, keyup) mouseover (mousein, mouseout) change, submit Аттрибуты событий: Тип Элемент Доп. информация (время, координаты, кнопка)
  • 23. Всплывание (bubbling) Действия по-умолчанию: a – переход по ссылке, form – отправка формы и т.д. <html> <p> Hello world <a href=”#”> CLCK </a> </p> </html>
  • 24. Обработчики событий <a href=”#” onclick=”alert(1); return false”>CLCK</a> <script> a = document.getElementById('the_a'); a.addEventListener('click', function(ev) { alert('clicked on ' + ev.target); alert('now on ' + this); alert('x ' + ev.clientX); alert('y ' + ev.clientY); ev.stopPropagation(); // не всплывать! ev.preventDefault(); // без умолчания! }); </script>
  • 26. AJAX
  • 29. Преимущества AJAX ● Не блокирует интерфейс ● Сокращает время загрузки страницы ● Уменьшает сетевой трафик ● Уменьшает нагрузку на сервер
  • 30. XHR – пример использования var xmlhttp = getXmlHttp() xmlhttp.open('GET', '/xhr/test.html', true); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { alert(xmlhttp.responseText); } else { alert('error' + xmlhttp.status); } } }; xmlhttp.send(null);
  • 31. “Запрос” <script src=”/load.js?id=3&callback=func”> </script> “Ответ” func({ 'res' : 'ok', . . . }); Ограничения AJAX ● Невозможно загружать файлы (решение: iframe) ● Работает только в своем домене (решение: JSONP)
  • 32. obj.addEventListener('click', function(ev) { . . . }); // FF, Chrome, Opera abj.attachEvent('onclick', function() { var ev = window.event; }); // IE xhr = new XMLHttpRequest(); // FF xhr = ActiveXObject("Msxml2.XMLHTTP"); // IE (Не)переносимость JavaScript
  • 35. jQuery, $ - точка входа $(document), $(this), $('a.btn'), $($('div')) $('div') – nodeset, “унаследован” от массива $('div').filter(':even').addClass('blue') .addpend('body').fadeOut('slow'); $(document.window).width() $('#mylink').attr('href') jQuery - основы
  • 36. Стандартные: .clazz #id div > + , Расширенные: input:radio // “сокращения” input:checked // только отмеченные checkbox span:visible // только видимые span li:nth(n) // n-ый в выборе li:nth-child(n) // n-ый потомок p:eq(n) // n+1 ый параграф p:gt(n) // параграфы, начиная с n+1 ого p:not(.special) // параграфы без класса special p:has(a.mylink) // только содержащие a.mylink jQuery - селекторы
  • 37. $(...).find('input[name=age]') // поиск вниз $(...).children('.nice') // потомки $(...).parent() // родитель $(...).closest('.containter') // поиск вверх $(...).siblings() // “соседи” $(...).next() $(...).nextAll() $(...).prev() $(...).prevAll() $(...).filter(':checked') // фильтрация $(...).each(function(id) { // итерация alert(this) }) jQuery - traversing
  • 39. AddClass / removeClass / hasClass / toggleClass $(...).height() // высота $(...).width() // ширина $(...).position() // смещение от родителя $(...).offset() // абсолютное смещение {'left':10, 'top':20} $(...).css('float') $(...).css('float', 'left') $(...).css({ left: 10, top: 20 }) Анимация и работа с CSS
  • 40. $.ajax({ url: '/vote.php', data: { id: 33, action: 'like' }, success: function (data, status) { alert('ok: ' + data); }, error: function (xhr, status) { alert('fail: ' + status); } }); $('#some_div').load('/list.php', { id: 33 }); jQuery AJAX
  • 41. <a id=”myid” data-mydata=”yep”>CLCK</a> $('#myid').data('mydata'); $('#myid').data('flag', 'on'); $('a.delete').live(function() { var $e = $(this); $.post('/delete/', { id : $e.data('id') }); $e.remove(); }); $(function() { alert('page loaded') }); Полезные мелочи
  • 42. Плагины jQuery jquery.modal // диалоговые окна jquery.validate // валидация данных jquery.accordion jquery.slider jquery.suggest // тысячи их!
  • 44. Best Practice ● Без глобальных переменных! ● Используйте data- атрибуты для обмена данными ● Используйте отдельные имена классов js-login-block, js-login-block-btn b_login_overlay, b_login_overlay__btn__inner (function() { // do some work })();
  • 46. Домашнее задание ● Изучить Class-Based Views и Django Templates ● Сделать шаблон для отображения списка объектов в таблице (“Лекции”) ● Сделать шаблон для отображения одного объекта в таблице ● Использовать наследование шаблонов, для исключения дублирования кода