SlideShare ist ein Scribd-Unternehmen logo
1 von 107
2015
Курс по уеб програмиране
Занятие №4
JavaScript (част 2)
Съдържание
• Функции (продължение)
• Масиви
• Асоциативни масиви
• Обекти
• Document Object Model (DOM)
• jQuery
Функции
• Наименованията на функциите са променливи
• Функциите са стойности (от тип Function)
• Функциите могат да бъдат анонимни (без наименование)
• Като следствие, функциите могат да се
– съхраняват в променливи
– извикват с методите call и apply
– предават като аргументи към други функции
– връщат като резултат от изпълнението на други функции
• Функциите могат да бъдат влагани (closures)
– Тялото на една функция може да съдържа други функции
Функции
• Създаване на анонимна функция
– Със стандартна декларация
• Синтаксис
function ([параметър-1[, параметър-2…]]) {
тяло-на-функцията
}
• Пример
function () {
}
function () {
console.log("Hello!");
}
function (a, b) {
return a + b;
}
Функции
• Създаване на анонимна функция
– С оператора new и идентификатора Function – като низови
аргументи се подават наименованията на параметрите (ако има
такива) и тялото на функцията
• Синтаксис
new Function() // празна функция
new Function([аргумент-1, [аргумент-2, […]], тяло)
• Пример
new Function()
new Function('console.log("Hello!")')
new Function('a', 'b', 'return a + b')
Функции
• Съхраняване на функции в променливи
– Става по същия начин, като с променливи от друг тип
• Синтаксис
променлива = стойност-или-израз-връщащ-функция
• Пример (следните съждения правят едно и също нещо
// стандартна декларация на функция
function sumFunc(a, b) {
return a + b;
}
// присвояване на анонимна функция на променлива
sumFunc = function (a, b) {
return a + b;
}
// присвояване на създадена с new анонимна функция на променлива
sumFunc = new Function('a', 'b', 'return a + b');
Функции
• Функциите могат да се извикват с методите call и apply
– Методът call – извиква функцията с подадени аргументи
• Синтаксис
функция.call(контекст[, аргумент-1[, аргумент-2[, …]]])
• Пример
sumFunc.call(null, 3, 5)
– Методът apply – извиква функцията с подаден масив от
аргументи
• Синтаксис
функция.apply(контекст[, масив-от-аргументи])
• Пример
sumFunc.apply(null, [3, 5])
Функции
• Предаване на функции като аргумент
– Става по същия начин, като с променливи от друг тип
– Функцията setInterval – указва подадена като аргумент функция
да се изпълнява периодично през посочен интервал от време и
връща идентификатор на таймера
• Синтаксис
setInterval(функция, милисекунди[, език])
• Пример
// всяка секунда (1000 ms) в конзолата ще се появява ред „Тик-так.“
intervalTimerId = setInterval(
function () { console.log("Тик-так."); },
1000);
Функции
• Предаване на функции като аргумент
– Става по същия начин, като с променливи от друг тип
– Функцията clearInterval – прекратява периодичните извиквания
указани от посочения идентификатор на таймера
• Синтаксис
clearInterval(идентификатор)
• Пример
clearInterval(intervalTimerId);
Функции
• Предаване на функции като аргумент
– Става по същия начин, като с променливи от друг тип
– Функцията setTimeout – указва подадената като аргумент функция
да се изпълнява еднократно след посочен интервал от време и
връща идентификатор на таймера
• Синтаксис
setTimeout(функция, милисекунди)
• Пример
// след 10 секунди (10000 ms) в конзолата ще се появява ред „Хоп!“
timeoutTimerId = setTimeout(
function () { console.log("Хоп!"); },
10000);
Функции
• Предаване на функции като аргумент
– Става по същия начин, като с променливи от друг тип
– Функцията clearTimeout – отказва еднократното извикване указано
от посочения идентификатор на таймера
• Синтаксис
clearTimeout(идентификатор)
• Пример
clearTimeout(timeoutTimerId);
Функции
• Връщане на функции като резултат от други функции
– Става по същия начин, като с променливи от друг тип
– Пример
function getFunctionForOperation(op) {
switch (op) {
case '+':
return function (a, b) { return a + b; };
case '-':
return function (a, b) { return a - b; };
}
}
Функции
• Връщане на функции като резултат от други функции
– Става по същия начин, като с променливи от друг тип
– Функциите позволяват затваряне (closure) – запазване областта на
видимост (свободни, нелокални променливи) – функцията работи в
своя лексикален обсег
– Пример
function getTextFunc() {
var name = 'Курс по програмиране';
var getName = function () {
return name;
}
return getName;
}
var func = getTextFunc();
alert(func.call(null));
Функции
• Функцията eval
– Изпълнява JavaScript код подаден като низов аргумент
– Кодът може да представлява променлива, израз, съждение или
множество от съждения
– Функцията връща като резултат резултата от изпълнението на кода
– Синтаксис
eval(низ)
– Пример
var code = prompt('Въведете JavaScript код');
if (code !== null && code !== '') {
var result = eval(code);
alert('Резултатът е ' + result);
}
Функции – упражнение
1. Създайте нов файл с наименование „functions2.html”
2. Създайте нов файл с наименование „functions2.js” и го реферирайте от файла
„functions2.html”
3. Напишете функция „showTime”, която извежда текущото време в конзолата, и
функция „showCounter”, която увеличава даден брояч при всяко извикване и
показва стойността му в конзолата
4. Напишете функция „startTask”, която стартира периодичното извикване на
подадена функция през 1 секунда, функция „stopTask”, която го спира, и функция
„toggleTask“, която пуска/спира поставена задача
5. Добавете бутон „Toggle Clock”, който пуска/спира извеждането на текущото време
в конзолата, и бутон „Toggle Counter”, който пуска/спира извеждането на брояча
в конзолата
Масиви
• Какво е „масив“?
– Структура от данни, от тип Array
– Представлява множество от стойности
– Само едно измерение
– Обръщението към всяка стойност става по номер
– Могат да бъдат добавяни и премахвани стойности
• Характеристики на масивите в JavaScript
– Референтен тип данни
– Размерност
Масиви
• Създаване на масив
– С оператора new и думата Array
• Синтаксис
new Array() // празен масив
new Array(големина) // масив с посочена големина
new Array(стойност-1, стойност-2[,…]) // масив от подадени стойности
• Пример
var primeNumbers = new Array(2, 3, 5, 7, 11)
Масиви
• Създаване на масив
– В квадратни скоби се изброяват нула или повече стойности
• Синтаксис
[[стойност-1[, стойност-2[,…]]]]
• Пример
// създава масив от 5 прости числа и го запазва променлива
var primeNumbers = [2, 3, 5, 7, 11];
Масиви
• Взимане големината на масив
– Свойството length – указва текущия брой елементи в масива
• Синтаксис
масив.length
• Пример
// извежда в конзолата броя елементи в масива primeNumbers
console.log(primeNumbers.length);
Масиви
• Достъпване на елемент от масив
– След променлива или израз, който връща масива, в квадратни
скоби се указва поредният номер (индексът) на елемента
(броенето започва от 0)
• Синтаксис
масив[индекс]
• Пример
// извежда в конзолата елемента с индекс 3 (т.е. 4-ти по ред)
console.log(primeNumbers[3]);
Масиви
• Цикъл за обхождане на масив (for…in)
– Обхожда изброимите елементи на масива
– Синтаксис
for (var идентификатор in масив)
{
съждение-или-блок;
}
– Пример
for (var i in primeNumbers)
{
console.log('primeNumbers[' + i + '] = ' + primeNumbers[i]);
}
Масиви
• Изтриване на елемент с оператора delete
– Присвоява специалната стойност undefined
• Синтаксис
delete масив[индекс]
• Пример
// задава стойност undefined на елемента с индекс 3 (т.е. 4-ти по ред)
delete primeNumbers[3];
Масиви
• Добавяне на стойност към съществуващ масив
– Методът push – добавя стойност към края на масива и връща новата
му големина
• Синтаксис
масив.push(стойност);
• Пример
var length = primeNumbers.push(13);
– Методът unshift – добавя стойност към началото на масива и
връща новата му големина
• Синтаксис
масив.unshift(стойност);
• Пример
var length = primeNumbers.unshift(13);
Масиви
• Премахване на стойност от съществуващ масив
– Методът pop – премахва стойност от края на масива и връща
стойността
• Синтаксис
масив.pop();
• Пример
var primeNumber = primeNumbers.pop();
– Методът shift – премахва стойност от началото на масива и връща
стойността
• Синтаксис
масив.shift();
• Пример
var primeNumber = primeNumbers.shift();
Масиви
• Добавяне/премахване на стойности от съществуващ масив
– Методът splice – добавя/премахва стойности от масива и връща
получилия се масив
• Синтаксис
масив.splice(индекс, брой-елементи-за-премахване[, стойности]);
• Пример
// премахва един (1) елемент от позиция 0 (началото) на масива
// и добавя два елемента (1 и 2)
primeNumbers.splice(0, 1, 1, 2);
// премахва нула (0) елемента от позиция 3 на масива
// и добавя един елемент (3)
primeNumbers.splice(3, 0, 3);
// премахва два (2) елемента от позиция 5 на масива
primeNumbers.splice(5, 2);
Масиви
• Извличане на подмасив
– Методът slice – връща подмасив на съществуващ масив
• Синтаксис
масив.slice(индекс-начало[, индеx-край]);
• Пример
// връща подмасива от елемента с индекс 3
// до края на масива
var somePrimeNumbers = primeNumbers.slice(3);
// връща подмасива от елемента с индекс 5
// до елемента с индекс 7
var somePrimeNumbers = primeNumbers.slice(5, 7);
// връща подмасива от елемента с индекс 5
// до предпоследния елемент
var somePrimeNumbers = primeNumbers.slice(5, -1);
Масиви
• Слепване на масиви
– Методът concat – връща слепен от множество масиви масив
• Синтаксис
масив-1.concat(масив-2[, масив-3[, …]]);
• Пример
// връща слят масив от прости числа, четни числа и числа на Фибоначи
var numbers = primeNumbers.concat(evenNumbers, fibonacciNumbers);
Масиви
• Търсене в масив
– Методът indexOf – търси стойност в масива, като започва търсенето
от началото (или посочен индекс) към края, и връща нейния индекс
(или -1, ако стойността не е намерена)
• Синтаксис
масив.indexOf(стойност[, индекс]);
• Пример
// търси числото 2 в масив от прости числа,
// като започва от числото с индекс 3
var indexOf2 = primeNumbers.indexOf(2, 3);
Масиви
• Търсене в масив
– Методът lastIndexOf – търси стойност в масива, като започва
търсенето от края (или посочен индекс) към началото, и връща
нейния индекс (или -1, ако стойността не е намерена)
• Синтаксис
масив.lastIndexOf(стойност[, индекс]);
• Пример
// търси числото 2 отзад-напред в масив от прости числа,
// като започва от числото с индекс 3
var indexOf2 = primeNumbers.lastIndexOf(2, 3);
Масиви
• Други операции с масиви
– Методът reverse – обръща масива отзад-напред
– Методът sort – сортира масива (по подразбиране, като низове, или
по подадено правило)
– Методът join – слива стойностите на масив в низ (по подразбиране
със запетая или с подаден делител)
• Синтаксис
масив.join([делител]);
• Пример
var tags = ['Ябълки', 'Круши', 'Домати', 'Краставици'];
// в променлива записваме низ от всички думи
// в масива разделени със запетая
var displayText = tags.join(',');
Масиви
• Масиви от масиви (назъбени масиви)
– Масиви, стойностите в които са масиви
– Всеки масив в масива може да има различна големина
– Когато големината на всички масиви е еднаква, ефективно се
получава двумерен масив
• Приложение на масивите от масиви
– Могат да бъдат използвани за
симулиране на двумерни масиви
– Съхранение на еднотипни (със
сходен смисъл масиви) с различна
големина
Масиви
• Създаване на масив от масиви
– Създаването става като на обикновен масив, но всяка от
стойностите може да бъде новосъздаден масив, променлива или
израз даващ като резултат масив
• Пример
// създава масив от оценките на учениците в един клас,
// като първият индекс е поредният номер на ученика (започващ от 0),
// а вторият индекс е поредната оценка
var studentMarks = [
[6, 6, 3, 5], // за № 0
marksFromKeyboard, // за № 1, marksFromKeyboard – масив
existingMarks.concat(marksFromDatabase) // за № 2, добавяме от БД
];
Масиви
• Променливата arguments
– Съществува в тялото на всяка функция
– Прилича на масив от подадените на функцията аргументи
– Позволява реализирането на функции с произволен брой
параметри
– Пример
function pushMany(array) {
for (var i in arguments) {
if (i > 0) {
array.push(arguments[i]);
}
}
}
Масиви
• Променливата arguments
– Свойството callee – връща описание на извиканата функция
– Свойството callee.caller – връща описание на извикващата
функция
– Пример (свойството name не се поддържа в Internet Explorer)
function eeyore() {
var me = arguments.callee;
var they = me.caller;
console.log(they.name + ' called ' + me.name);
}
function pooh() {
eeyore();
}
Масиви – упражнение
1. Създайте нов файл с наименование „numbers.html”
2. Създайте нов файл с наименование „numbers.js” и го реферирайте от файла
„numbers.html”
3. Създайте масива „primeNumbers” и напишете функция, която да го попълни с
простите числа в интервала [1; 1000)
4. Оптимизирайте намирането на прости числа така, че търсенето на делители да се
извършва само сред прости числа
5. Създайте масива „fibonacciNumbers” и напишете функция, която да го попълни с
числата на Фибоначи в интервала [0; 1000)
6. Създайте масива „kewlNumbers” и напишете функция, която да го попълни с
числата, които се повтарят в масивите „primeNumbers” и „fibonacciNumbers”
7. Изведете трите масива в конзолата
Масиви – упражнение
1. Създайте нов файл с наименование „student_info.html”
2. Създайте нов файл с наименование „student_info.js” и го реферирайте от файла
„student_info.html”
3. Създайте масивите „studentNames”, „studentMarks” и „studentAverages”, които да
съхраняват списъци с имената на ученици, годишните им оценки по различните
предмети и средните им годишни оценки
4. Напишете скрипт, който въвежда информация за ученик, така че:
1. Подканва потребителя да въведе имената на ученика и ги добавя в „studentNames”
2. Подканва потребителя да въведе годишните оценки на ученика разделени с интервал,
разделя ги и ги записва като масив в „studentMarks”
3. Пита потребителя дали иска да въведе информацията за друг ученик (функцията
„confirm”)
4. Ако потребителят избере да въведе информацията за друг ученик, отива в т.1
5. В масива „studentAverages” записва средните годишни оценки на учениците
6. Извежда в HTML документа данните в табличен вид
Асоциативни масиви
• Какво е „асоциативен масив“?
– Структура от данни, от тип Object
– Представлява множество от двойки ключ-стойност
– Само едно измерение
– Обръщението към всяка стойност става по ключ
– Могат да бъдат добавяни и премахвани стойности
• Характеристики на асоциативните масивите в JavaScript
– Референтен тип данни
Асоциативни масиви
• Създаване на асоциативен масив
– С оператора new и думата Object
• Синтаксис
new Object() // празен асоциативен масив
• Пример
var studentInfo = new Object()
Асоциативни масиви
• Създаване на асоциативен масив
– Ключът и стойността за разделени с двуеточие (“:”)
– Различните двойки са разделени със запетая (“,”)
– Във фигурни скоби се изброяват двойки ключ-стойности
– Ключовете могат да са низови
• Синтаксис
{[низ-1: стойност-1[, низ-2:стойност-2[,…]]]}
• Пример
// създава асоциативен масив описващ англо-български речник
var dictionary = {
"example": 'I. (n) Пример, образец, модел; II. (n) Назидание, поука,
урок; III. (v) Служа за пример, давам като пример',
"excelsior": 'I. (int лат.) (все) по-нагоре! II. (n) фин талаш (за
опаковка)'
};
Асоциативни масиви
• Създаване на асоциативен масив
– Ключът и стойността за разделени с двуеточие (“:”)
– Различните двойки са разделени със запетая (“,”)
– Във фигурни скоби се изброяват двойки ключ-стойности
– Ключовете могат да са идентификатори
• Синтаксис
{[идентификатор-1: стойност-1[, идентификатор-2: стойност-2[,…]]]}
• Пример
// създава асоциативен масив описващ информация за ученик
var studentInfo = {
names: "Иванчо Марийкин",
marks: [2, 2, 4, 3, 4]
};
Асоциативни масиви
• Създаване на асоциативен масив
– Ключът и стойността за разделени с двуеточие (“:”)
– Различните двойки са разделени със запетая (“,”)
– Във фигурни скоби се изброяват двойки ключ-стойности
– Ключовете могат да са смесени
• Синтаксис
{[ключ-1: стойност-1[, ключ-2:стойност-2[,…]]]}
• Пример
// създава асоциативен масив описващ информация за ученик
var studentInfo = {
names: "Иванчо Марийкин",
"marks": [2, 2, 4, 3, 4]
};
Асоциативни масиви
• Достъпване на елемент от асоциативен масив
– След променлива или израз, който връща масива, в квадратни
скоби се указва низовият ключ на елемента
• Синтаксис
масив[ключ]
• Пример
// извежда в конзолата превода на думата “example”
console.log(dictionary["example"]);
– След променлива или израз, който връща масива, и оператора
“.”, указва идентификатора на елемента
• Синтаксис
масив.ключ
• Пример
// извежда в конзолата имената на ученика
console.log(studentInfo.names);
Асоциативни масиви
• Цикъл за обхождане на асоциативен масив (for…in)
– Обхожда изброимите елементи на масива
– Синтаксис
for (var идентификатор in масив)
{
съждение-или-блок;
}
– Пример
for (var key in studentInfo)
{
console.log('studentInfo["' + key + '"] = ' + studentInfo[key]);
}
Асоциативни масиви
• Премахване на елемент с оператора delete
– Премахва напълно посочения елемент от асоциативния масив
• Синтаксис
delete масив.ключ
delete масив[ключ]
• Пример
// премахва елемента с ключ “names”
delete studentInfo.names;
// премахва елемента с ключ “marks”
delete studentInfo["marks"];
Асоциативни масиви
• Разлика между обикновените и асоциативните масиви
– Асоциативните масиви нямат свойство за определяне на големина
– Асоциативните масиви нямат редица методи достъпни при
обикновените списъци
– Елементите на асоциативните масиви могат да се изтриват с
оператора delete
Асоциативни масиви – упражнение
1. Създайте нов файл с наименование „student_info2.html”
2. Създайте нов файл с наименование „student_info2.js” и го реферирайте от файла
„student_info2.html”
3. Създайте масива „students”, които да съхраняват информацията за учениците
4. Напишете скрипт, който въвежда информация за ученик, така че:
1. Създава асоциативен списък с информация за ученик
2. Подканва потребителя да въведе имената на ученика и ги добавя с ключ „names”
3. Подканва потребителя да въведе годишните оценки на ученика разделени с интервал,
разделя ги и ги записва с ключ „marks”
4. Пита потребителя дали иска да въведе информацията за друг ученик (функцията
„confirm”)
5. Ако потребителят избере да въведе информацията за друг ученик, отива в т.1
5. В масива „students” записва средните годишни оценки на учениците с ключ
„average”
6. Извежда в HTML документа данните в табличен вид
Обекти
• Какво е „обектно-ориентирано програмиране“?
– Парадигма (подход) в програмирането
– Програмният код се разбива на части (обекти)
– Обектите се характеризират с данни и функции (характеристики и
поведение)
– Обектите си взаимодействат – различни начини
– Три основни принципа:
• Капсулиране
• Наследяване
• Полиморфизъм
– Обектите са организирани в класове, които дават техните особености
Обекти
• Какво е „прототипно-базирано програмиране“?
– Стил в обектно-ориентираното програмиране
– Няма класове, има прототипи
– Няма наследяване на класове, има клониране и декориране на
прототипи
• JavaScript е прототипно-базиран език за програмиране
• Вградени обекти
– Такива са Object, Array, String и Math
• Програмистите могат да създават свои обекти
– Вместо класове се дефинират функции
Обекти
• Обектите в JavaScript
– Обектите са функции и функциите са обекти
– Конструктор на обекта е тялото на функцията
• Конструктор е кодът изпълняван при създаване на копие на обекта
– Данните на обекта са двойки от типа идентификатор-стойност
• Реализирани като асоциативен списък
Обекти
• Създаване на клас
– Със стандартна декларация на функция
• Синтаксис
function име-на-клас([параметър-1[, параметър-2…]]) {
тяло-на-конструктора
}
• Пример
function Animal(name) {
console.log('Току-що бе създаден Animal обект с име ' + name);
}
– Със стандартна декларация на асоциативен масив
• Синтаксис
име-на-клас = { };
• Пример
Animal = { };
Обекти
• Достъпване на прототипа на клас
– Със специалното свойство на класа prototype
• Синтаксис
име-на-клас.prototype
име-на-клас["prototype"]
• Пример
Animal.prototype
Animal["prototype"]
Обекти
• Добавяне на свойства към прототип
– Добавените към прототипа свойства се споделят от всички копия на
прототипа
– По същите начини като добавяне на стойности към асоциативен
масив
• Синтаксис
име-на-клас.prototype.име-на-свойство = стойност-или-израз
име-на-клас["prototype"].име-на-свойство = стойност-или-израз
име-на-клас.prototype["име-на-свойство"] = стойност-или-израз
име-на-клас["prototype"]["име-на-свойство"] = стойност-или-израз
• Пример
Animal.prototype.makeSound = function() {
console.log('…');
}
Обекти
• Премахване на свойства от прототип
– Премахнатите от прототипа свойства се премахват от всички копия
на прототипа
– По същите начини като премахване на стойности от асоциативен
масив
• Синтаксис
delete име-на-клас.prototype.име-на-свойство
delete име-на-клас["prototype"].име-на-свойство
delete име-на-клас.prototype["име-на-свойство"]
delete име-на-клас["prototype"]["име-на-свойство"]
• Пример
delete Animal.prototype.makeSound;
Обекти
• Добавяне на свойства към обекта
– Добавено към обекта свойство се добавя само за текущото копия
– По същите начини като добавяне на стойности към асоциативен
масив
• Синтаксис
име-на-обект.име-на-свойство = стойност-или-израз
име-на-обект["име-на-свойство"] = стойност-или-израз
• Пример
animal.makeSound = function() {
console.log('Бау!');
}
Обекти
• Премахване на свойства от обект
– Премахнато от обекта свойство се премахва само от текущото
копие
– По същите начини като премахване на стойности от асоциативен
масив
• Синтаксис
delete име-на-обект.име-на-свойство
delete име-на-обект["име-на-свойство"]
• Пример
delete animal.makeSound;
Обекти
• Запазената дума this
– Има различна стойност според контекста
– Връща обекта, представляващ настоящия контекст
– Според случая, контекстът приема следните стойности:
• В глобалния контекст – текущия прозорец
• В изпълняван от функцията eval код
– При директно извикване – не се променя
– При индиректно извикване – все едно е в глобалния контекст
• В кода на функция
– Ако функцията е свойство на обект – обекта, в който е функцията
– В някои от вградените функции – подава се като аргумент
– В останалите случаи – все едно е в глобалния контекст
Обекти
• Добавяне на свойства към обекта в конструктора
– В конструктора могат да бъдат добавени свойства с използване на
запазената дума this
• Синтаксис
this.име-на-свойство[ = стойност-или-израз]
this["име-на-свойство"][ = стойност-или-израз]
• Пример
function Animal(name) {
// създава свойството _name и му дава стойност от параметъра
this._name = name;
this.getName = function() {
return this._name;
}
console.log('Току-що бе създаден Animal обект с име ' + name);
}
Обекти
• Наследяване
– Класовете могат да се декларират така, че те (наследниците) да
наследяват свойствата на други класове (родители)
– Наследниците могат да добавят и премахват наследените от
родителите свойства
– Наследяването се реализира чрез копиране на прототипи
– Реализация на наследяването
1. Създаваме функция/асоциативен списък клас-наследник
2. Подменяме прототипа ѝ с обект от клас клас-родител
3. Подменяме конструктора в прототипа на клас-наследник с нов
4. В конструктора на клас-наследник се осъществява извикване към
конструктора на клас-родител
Обекти
• Наследяване
– Пример
function Animal(name) {
this._name = name;
}
// създаваме обща за всички обекти от клас Animal функция getName
Animal.prototype.getName = function() {
return this._name;
}
// създаваме клас Dog с конструктор
Dog = function (name) {
Animal.prototype.constructor.call(this, name);
}
// подменяме прототипа на Dog с този на Animal
Dog.prototype = new Animal();
// възстановяваме конструктора на Dog
Dog.prototype.constructor = Dog;
Обекти
• Проверка за наследници
– Често се налага проверка дали един обект наследява друг обект
– Запазената дума instanceof
• Синтаксис
обект instanceof конструктор
• Пример
var animal = new Animal('Sparky');
console.log(animal instanceof Animal);
console.log(animal instanceof Dog);
var dog = new Dog('Barky');
console.log(dog instanceof Animal);
console.log(dog instanceof Dog);
console.log(Dog.prototype instanceof Animal);
Обекти
• Методът Object.create (ECMAScript 5.1+)
– Създава обект с подаден прототип (и свойства)
– Синтаксис
Object.create(прототип[, асоциативен-списък-от-свойства])
– Пример
var animal = Object.create(Animal.prototype, {
"_name": 'Кучо',
"_age": 3,
"_sound": 'Джаф!'
});
Обекти
• Наследяване с Object.create (ECMAScript 5.1+)
– Пример
function Animal(name) {
this._name = name;
}
// създаваме обща за всички обекти от клас Animal функция getName
Animal.prototype.getName = function() {
return this._name;
}
// създаваме клас Dog с конструктор
Dog = function (name) {
Animal.prototype.constructor.call(this, name);
}
// създаваме нов обект с подаден прототип
Dog.prototype = Object.create(Animal.prototype);
// възстановяваме конструктора на Dog
Dog.prototype.constructor = Dog;
Обекти
• Обобщение на малко терминология
– Функция – член на типа Object, наследник на стандартния вграден
конструктор Function
– Вградена функция – вграден обект, който е функция
– Свойство – асоциация между наименование и стойност, която е
част от обект
– Метод – функция, която е стойност на свойство
– Вграден метод – метод, който е вградена функция
– Собствено свойство – свойство директно съдържано от обект
– Наследено свойство – свойство на обект, което не негово
собствено, а собствено или наследено от прототипа му
Обекти – упражнение
1. Създайте нов файл с наименование „cosmos.html”
2. Създайте нов файл с наименование „cosmos.js” и го реферирайте от файла
„cosmos.html”
3. Създайте клас „CelestialBody” със свойства „_name”, „_coordinates”, „_mass” и
„_age”, както и конструктор, който приема като параметър „name”
4. Наследете класа „CelestialBody” с клас „Sun“ със свойства „_isSupernova” и
„_metallicity”, както и конструктор, който приема като параметри „name” и
„isSupernova”
5. Наследете класа „CelestialBody” с клас „Planet“ със свойства „_sun” и
„_hasAtmosphere”, както и конструктор, който приема като параметри „name”,
„sun” и „hasAtmosphere”
6. Подменете метода „toLocaleString” в прототипа на „CelestialBody”, така че да
върне низ с информацията за съответния обект
7. Създайте масив от няколко различни „Sun“ и „Planet“ обекта и изведете в
информацията от метода „toLocaleString” за всички елементи в масива
Document Object Model (DOM)
• Какво е „Document Object Model”?
– Програмен интерфейс за връзка с HTML и XML документи
– Структурирано йерархично представяне на документа
– Структурата и свойствата в DOM мога да бъдат променяни
– Промяната може да промени структурата, съдържанието и
оформлението на документа
– Свързващо звено между документа и езика за програмиране
Document Object Model (DOM)
• Какво е „Document Object Model”?
Document Object Model (DOM)
• Основни положения в Document Object Model
• Структурата е обектно-ориентирана
• Всичко в Document Object Model е вид възел (Node)
– Документът, като такъв, е документен възел
– Всички елементи са елементни възли
– Всички атрибути са атрибутни възли
– Текстът в елементите са текстови възли
– Коментарите са коментарни възли
• Всеки вид възел има своите свойства и методи
Document Object Model (DOM)
• Йерархия на класовете в Document Object Model
Document Object Model (DOM)
• Интерфейсът Node
• Представлява възел, основен обект за Document Object Model
• Основни свойства
– Свойството attributes – масив от атрибутите на възела
– Свойството childNodes – масив от подвъзли
– Свойството firstChild – първи подвъзел
– Свойството lastChild – последен подвъзел
– Свойството nextSibling – следващ възел на същото ниво
– Свойството nodeType – указва вида на възела
– Свойството parentNode – родителски възел
– Свойството previousSibling – предишен възел на същото ниво
Document Object Model (DOM)
• Интерфейсът Node
• Представлява възел, основен обект за Document Object Model
• Основни методи
– Методът appendChild – добавя подвъзел към списъка подвъзли
– Методът cloneNode – клонира възела
– Методът removeChild – премахва подвъзел от списъка подвъзли
– Методът replaceChild – подменя подвъзел в списъка подвъзли
Document Object Model (DOM)
• Интерфейсът ParentNode
• Представлява възел, който може да има подвъзли
• Основни свойства и методи
– Свойството children – списък от всички елементи, на които възелът е родител
– Свойството childElementCount – брой елементи във възела
– Свойството firstElementChild – първият елемент, подвъзел на възела
– Свойството lastElementChild – последният елемент, подвъзел на възела
Document Object Model (DOM)
• Интерфейсът ChildNode
• Представлява възел, който може да има родителски възел
• Основни свойства и методи
– Свойството previousElementSibling – предишен елемент в списъка с
елементи на родителския възел
– Свойството nextElementSibling – следващ елемент в списъка с елементи на
родителския възел
– Методът remove – премахва възела от списъка с подвъзли на родителя
– Методът before – вмъква подаден списък от възли преди настоящия възел в
списъка от подвъзли на родителя
– Методът after – добавя подаден списък от възли след настоящия възел в
списъка от подвъзли на родителя
Document Object Model (DOM)
• Интерфейсът EventTarget
• Представлява обект, който може да получава събития от DOM
• За едно събитие могат да се „абонират“ получатели
• При възникване на събитие, „абонатите“ се уведомяват
последователно
• Последен в списъка е браузерът с подразбиращо се поведение
• Основни свойства и методи
– Методът addEventListener – към списъка със „получатели“ на събития, добавя
функция, която да обработва определено събитие
– Методът removeEventListener – от списъка със „получатели“ на събития,
премахва функция, която обработва определено събитие
– Методът dispatchEvent – предизвиква случването на определено събитие,
известявайки последователно списъка от „получатели“
Document Object Model (DOM)
• Интерфейсът Element
• Специфичен тип възел, съответстващ на елемент в документа
• Наследява свойствата на Node и EventTarget, имплементира
ParentNode и ChildNode
• Основни свойства
– Свойството className – съдържа низ представляващ класа на елемента
– Свойството clientHeight – вътрешна височина на елемента
– Свойството clientTop – широчина на горната рамка на елемента
– Свойството clientLeft – широчина на лявата рамка на елемента
– Свойството clientWidth – вътрешна широчина на елемента
– Свойството id – съдържа низ представляващ идентификатора на елемента
– Свойството innerHTML – HTML код на съдържанието на елемента
– Свойството outerHTML – HTML код на елемента и съдържанието му
– Свойството tagName – наименованието на тага, с който е дефиниран елементът
Document Object Model (DOM)
• Интерфейсът Element
• Специфичен тип възел, съответстващ на елемент в документа
• Наследява свойствата на Node и EventTarget, имплементира
ParentNode и ChildNode
• Основни методи
– Методът getAttribute – връща стойността на атрибута с посочено наименование
– Методът getElementsByClassName – връща списък с елементите от посочен клас
– Методът getElementsByTagName – връща списък с елементите с посочен таг
– Методът hasAttribute – проверява дали е деклариран атрибут с посочено
наименование
– Методът setAttribute – установява стойност на посочен атрибут
– Методът insertAdjacentHTML – обработва текст като HTML/XML и го вмъква на посочена
позиция
Document Object Model (DOM)
• Интерфейсът Document
• Входна точка към съдържанието на страницата
• Предоставя функционалността глобална за документа
• Основни свойства и методи
– Свойството documentElement – елемента съответстващ на документа. За HTML
документи това е HTML елемент
– Свойството documentURI – адрес (URL) на документа
– Методът createAttribute – създава нов атрибутен възел
– Методът createCDATASection – създава нова CDATA секция
– Методът createComment – създава нов коментарен възел
– Методът createElement – създава нов елементен възел
– Методът createTextNode – създава нов текстов възел
– Методът getElementsByClassName – взима всички елементи от посочен клас
– Методът getElementsByTagName – взима всички елементи с посочен таг
Document Object Model (DOM)
• Интерфейсът GlobalEventHandlers
– Описва манипулаторите на събития (event handlers) общи за
множество интерфейси
– Основни манипулатори на събития
• Свойството onfocus – фокусиране на съответния обект
• Свойството onchange – промяна на съдържанието
• Свойството onclick – настискане (с мишка или клавиатура)
• Свойството oncontextmenu – извеждане на контекстно меню
• Свойството onkeypress – натискане на клавиш от клавиатурата
• Свойството onload – приключило зареждане
• Свойството onshow – показване
• Свойството onsubmit – изпращане (обикновено на форма)
Document Object Model (DOM)
• Обектът CSSStyleDeclaration
– Описва множество от двойки CSS свойство-стойност
– Свойствата му съответстват на различните CSS свойства, а
стойностите им – на стойностите на CSS свойствата
Document Object Model (DOM)
• Интерфейсът HTMLElement
• Специфичен тип възел, съответстващ на елемент в HTML документ
• Наследява свойствата на Element и GlobalEventHandlers
• Основни свойства и методи
– Свойството style – CSSStyleDeclaration обект представляващ от CSS двойки
свойство-стойност
– Свойството title – низ появяващ се при заставане на мишката над елемента
– Методът click – изпраща събитие за натискане на елемента
– Методът focus – установява фокус над елемента
Document Object Model (DOM)
• Разширения на Document за HTML документи
• Основни свойства и методи
– Свойството body – дава <body> елемента на документа
– Свойството cookie – взима разделени с „;“ бисквитки или установява бисквитка
– Свойството forms – декларираните в документа форми
– Свойството head – дава <head> елемента на документа
– Свойството location – Location обект описващ местоположението на документа
– Свойството referrer – адрес (URL) на страницата, от която се е стигнало до документа
– Свойството title – низ представляващ заглавие на документа
– Свойството URL – адрес (URL) на документа
– Методът getElementsByName – взима всички елементи с посочено наименование
– Методът getSelection – Selection обект, който описва маркирания текст
– Методът hasFocus – връща true, ако фокусът се намира някъде в документа
– Методът write – изписва посочения текст в документа
Document Object Model (DOM)
• Обектът Window
• Отправна точка за достъп до Domain Object Model
• Имплементира GlobalEventHandlers
• Достъпен чрез глобалната променливата window
• Променливата window се явява глобален контекст и съдържа всички
глобални променливи (в т.ч. самата window) и функции
• Основни свойства и методи
– Свойството location – обект даващ достъп до местоположението на текущия
документ
– Свойството history – обект даващ достъп до „историята“ на текущата сесия
– Свойството document – обект даващ достъп до текущия документ и имплементира
интерфейсите Document и Node
– Методите alert, confirm и prompt
Document Object Model (DOM)
• Обработка на събития свързани с елемент
– На атрибута за събитие се присвоява стойност
– Стойността тяло на анонимна функция
– Първи аргумент е елементът, който е бил обект на събитието
– Той е и контекст на извикването и съответно стои зад запазената
дума this
– Уведомяването за настъпване на събитията може да бъде
прекъснато и подразбиращото се поведение на браузера -
възпрепятствано, ако функцията или кодът в атрибута за събитие
върне false
Document Object Model (DOM)
• Обработка на събития свързани с елемент
– На атрибута за събитие се присвоява стойност
– Пример
<a href="http://acad.david.bg/"
onclick="return confirm('Do you really want to go there?')">
ДАВИД академия
</a>
Document Object Model (DOM)
• Манипулиране на свойствата на елемент
– Трябва да разполагаме с обекта, който го представлява
– След като разполагаме с елемента, свойствата на елемента могат
да бъдат четени и променяни
– Промяната на свойствата може да се отрази на външния вид,
положението и поведението на съответния елемент в браузера
Document Object Model (DOM)
• Манипулиране на свойствата на елемент
– Трябва да разполагаме с обекта, който го представлява
– Можем да вземем обекта със запазената дума this, когато
обработваме събитие
– Пример
<input type="button"
value="Click me!"
onclick="this.value = 'Thank you!'" />
Document Object Model (DOM)
• Манипулиране на свойствата на елемент
– Трябва да разполагаме с обекта, който го представлява
– Можем да потърсим елемента по идентификатор в документа
(идентификаторите трябва да са уникални)
– Пример
<label for="url">URL:</label>
<input id="url" type="text" />
<input type="button"
value="Go"
onclick="window.location =
document.getElementById('url').value" />
Document Object Model (DOM)
• Манипулиране на свойствата на елемент
– Трябва да разполагаме с обекта, който го представлява
– Можем да потърсим елемента по наименование на класа му
– Пример
<div class="box-a">Box ?</div>
<div class="box-b">Box ?</div>
<div class="box-a">Box ?</div>
<script>
var elements = document.getElementsByClassName('box-a');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
element.innerHTML = 'Box A';
}
</script>
Document Object Model (DOM)
• Манипулиране на свойствата на елемент
– Трябва да разполагаме с обекта, който го представлява
– Можем да потърсим елемента по наименование на тага му
– Пример
<div class="box-a">Box ?</div>
<div class="box-b">Box ?</div>
<div class="box-a">Box ?</div>
<script>
var elements = document.getElementsByTagName('div');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
element.innerHTML = 'Box';
}
</script>
Document Object Model (DOM)
• Създаване и добавяне на елемент
– Можем да създаваме елементи и да ги добавяме към други
елементи
– Пример
<div id="box">Box</div>
<script>
var element = document.createElement('a');
element.href = 'http://acad.david.bg/';
element.innerHTML = 'ДАВИД академия';
var box = document.getElementById('box');
box.appendChild(element);
</script>
Document Object Model (DOM)
• Премахване на елемент
– Можем да премахваме елементи
– Пример
<div id="box">
<a href="http://google.com/">Google</div>
</div>
<script>
var box = document.getElementById('box');
var elements = box.getElementsByTagName('a');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
box.removeChild(element);
}
</script>
Document Object Model (DOM)
• Подменяне на елемент
– Можем да подменим един елемент с друг
– Пример
<div id="box">
<a href="http://acad.david.bg/">ДАВИД академия</div>
</div>
<script>
var box = document.getElementById('box');
var elements = box.getElementsByTagName('a');
for (var i = 0; i < elements.length; i++) {
var oldElement = elements[i];
var newElement = document.createElement('a');
newElement.href = 'http://acad.david.bg/';
newElement.innerHTML = 'ДАВИД академия';
box.replaceChild(newElement, oldElement);
}
</script>
Document Object Model (DOM)
• Обобщение на някои възможности
– Елементите могат да бъдат променяни – тяхното съдържание,
техните свойства, техните атрибути
– Елементите могат да бъдат добавяни/премахвани/подменяни
– Елементите могат да бъдат размествани, украсявани, скривани,
показвани…
Document Object Model (DOM) – упражнение
1. Създайте нов файл с наименование „student_info3.html”
2. Създайте нов файл с наименование „student_info3.js” и го реферирайте от файла
„student_info3.html”
3. В „student_info3.html” добавете таблица с форма за попълване на данни за
ученик – име, презиме, фамилия, списък от оценки. Добавете също така празна
таблица с ID „studentTable”
4. В „student_info3.js” добавете масив от информация за ученици „students”,
функция „addStudent” за добавяне на ученик в списъка, изчисляване и записване
на средния му успех, както и функция „showStudents” за извеждане на
информацията за учениците в списъка в таблицата с ID „studentTable”
5. При натискане на бутон „Добави“, към списъка да се добави ученик с попълнената
във формата информация и да се опресни таблицата „studentTable”
jQuery
• Какво е “jQuery”?
– jQuery (www.jquery.com)е JavaScript библиотека от функции
– Обектът jQuery е централен в jQuery библиотеката
– Обектът jQuery е обвивка около един или повече DOM елемента
– Обектът jQuery дава функции за значително по-лесна работа
манипулация на DOM
– Обектът jQuery дава функции за работа с данни и с мрежата
– Обектът jQuery може да бъде разширяван с допълнителни функции
jQuery
• Първи стъпки в jQuery
– Включване на jQuery в страница
• Чрез изтегляне на jQuery библиотеката и реферирането му в
страницата
<script type="text/javascript" src="jquery.min.js"></script>
• Чрез реферирането му директно от предпочитана мрежа за
предоставяне на съдържание – CDN (Content Delivery Network)
<script type="text/javascript"
src="//code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript"
src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript"
src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"></script>
– Обектът jQuery има стандартен съкратен запис – $
– Много от методите приемат функции като параметри
jQuery
• Прихващане зареждането на DOM
– Добре е изпълнението на скриптовете да започне, след като DOM е
напълно зареден и готов за използване
– $(функция) – задава функция, която да се изпълни, след като DOM е
напълно зареден и готов за използване
• Пример
$(function () {
alert('DОМ е готов. Ти си на ход!');
});
jQuery
• Обвиване на обект(и) с jQuery обект
– $(селектор[, контекст]) – връща jQuery обвивка около намерени
по посочен селектор елементи
• Селекторът е същият като тези използвани в CSS
• Търсенето става в целия документ, освен ако не е посочен контекст
(DOM елемент, документ или jQuery обект)
• Пример
var header = $('header');
var sectionDates = $('section .date');
var logo = $('#logo');
– $(елемент) – връща jQuery обвивка около подаден DOM елемент
• Пример
var logo = $(document.getElementById('logo'));
jQuery
• Обвиване на обект(и) с jQuery обект
– $(масив-от-елементи) – връща jQuery обвивка около подаден
масив от DOM елементи
• Пример
var paragraphs = $(document.getElementsByTagName('p'));
– $(обект) – връща jQuery обвивка около обикновен обект
• Малък набор от операции се поддържат върху обикновени обекти
• Пример
var test = $({"Pi": Math.PI});
– $(jQuery-обект) – клонира jQuery обект
• Когато се направи клонинг на съществуващ jQuery обект, който сочи
към същите DOM елементи, като оригиналния
jQuery
• Създаване на елементи с jQuery
– $(html[, документ]) – създава DOM елементи от подадения HTML (в
подадения документ) и създава jQuery обвивка около тях
• Ако подаденият низ не прилича на HTML, се интерпретира като
селектор (вж. Обвиване на обекти с jQuery обект
• Пример
var jqObject = $('<p class="title">jQuery Rocks</p>');
– $(html, атрибути) – създава DOM елементи от подадения HTML с
подадени (под формата на обект) атрибути, събития и методи,
които да подаде на новосъздадения обект
• Пример
var jqObject = $('<p class="title">jQuery Rocks</p>',
{"font-weight": 'bold'});
jQuery
• Методи за манипулиране на атрибутите на елемент
– attr – взима или присвоява стойността на посочен атрибут на
избрания елемент
– val – взима или присвоява стойността на value атрибута на
избрания елемент
• Методи за управление на външния вид
– show, hide и toggle – показва, скрива и превключва видимостта на
избрания елемент
– addClass и removeClass – добавя и премахва клас от избрания
елемент
– css – взима или присвоява стойността на style атрибута на
избрания елемент
jQuery
• Mетоди на манипулиране на структурата на документа
– text и html – връщат или присвояват комбинираното текстово
съдържание и HTML съдържанието на избрания елемент
– append и prepend – вмъква елемент в DOM след и преди избрания
елемент
– appendTo – добавя избрания елемент към списъка от поделементи
на посочен елемент
– before и after – вмъква посочено в аргумент съдържание преди и
след всеки от избраните елементи
– insertBefore и insertAfter – вмъква всеки от посочените елементи
преди и след избрания елемент
jQuery
• Методи за реализиране на ефекти
– аnimate – “анимира“ посочени CSS свойства на избрания елемент
към посочени стойности
– fadeIn, fadeOut, fadeTo и fadeToggle – изменят прозрачността на
избрания елемент
– slideUp, slideDown, slideToggle – скриват, показват и превключват
видимостта на избрания елемент с плъзгащо движение
jQuery
• Методи за работа със събития
– on и off – закачва се и се откачва от събитие за избрания елемент
– one – закачва се за еднократно изпълнение при възникване на
събитие за избрания елемент
– event.stopPropagation – спира прихващането на събитието нагоре
по DOM дървото
– event.preventDefault – възпрепятства подразбиращото се действие
на браузера
– ready – указва функция, която да се изпълни при пълно зареждане
на DOM. Методът е валиден само за документа
– click – абонира се за събитието “click” на избрания елемент, или
го предизвиква
– …
jQuery
• Методи за работа с AJAX (Asynchronous JavaScript and XML)
• Помощни методи
– data – взима или съхранява данни асоциирани с елемента или
избраните елементи
– each – изпълнява посочена функция върху всеки елемент от избрано
множество от елементи
– toArray – превръща избраните елементи в масив
– parseHTML – превръща форматиран като HTML низ и го превръща в
DOM възли
– parseJSON – превръща форматиран като JSON низ и го превръща в
JavaScript обект
– parseXML – превръща форматиран като XML низ и го превръща в
XML документ
jQuery – упражнение
1. Създайте нов файл с наименование „traffic_lights.html”
2. Създайте нов файл с наименование „traffic_lights.css” и го реферирайте от файла
„traffic_lights.html”. Във файла добавете следния CSS клас:
3. В „traffic_lights.html” реферирайте jQuery от някой от достъпните CDN сървъри
4. Създайте нов файл с наименование „traffic_lights.js” и го реферирайте от файла
„traffic_lights.html”.
5. Направете кутийка с черен (#000000) фон и три кръга (кутийки от клас „circle” в нея съответно с
червен (#b80021), жълт (#de9400) и зелен (#3a6100) фон, стиловете на които също да бъдат в
съответните класове
6. Направете функция „pulse“, която, използвайки функцията animate на jQuery, кара подадени като
асоциативен списък свойства да „пулсира“ в подадени граници
7. Извикайте функцията „pulse“ за трите цветни кутийки, така че да непрозрачността им (свойството
„opacity”) да „пулсира“ в граници от 0 до 1
8. Анимацията да се повтаря, докато не бъде натисната на черната кутийка
.circle {
width: 100px; height: 100px; border-radius: 50px;
line-height: 100px; font-size: 20px; text-align: center;
}
Въпроси?
Благодаря!
• Валери Дачев
– valery@david.bg
– @vdachev
– https://facebook.com/vdachev
• ДАВИД академия
– acad@david.bg
– http://acad.david.bg/
– @david_academy
– https://facebook.com/DavidAcademy

Weitere ähnliche Inhalte

Was ist angesagt?

Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7DAVID Academy
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...DAVID Academy
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2DAVID Academy
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSDAVID Academy
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12DAVID Academy
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...DAVID Academy
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9DAVID Academy
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New FeaturesSvetlin Nakov
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLDAVID Academy
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...DAVID Academy
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...DAVID Academy
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)DAVID Academy
 
Основни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесОсновни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесAtelier for robotics
 
Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Georgi Mirchev
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSDAVID Academy
 

Was ist angesagt? (20)

Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7Училищен курс по програмиране на C# (2013/2014), занятие №7
Училищен курс по програмиране на C# (2013/2014), занятие №7
 
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
Курс по програмиране на C# 2013 - 8. Полиморфизъм. Абстракция. Шаблони. Вград...
 
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
Курс по програмиране на C# 2013 - 1. Въведение в компютърното програмиране и C#
 
Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2Училищен курс по програмиране на C# (2013/2014), занятие №2
Училищен курс по програмиране на C# (2013/2014), занятие №2
 
Курс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSSКурс по уеб програмиране (2015), занятие №2 - CSS
Курс по уеб програмиране (2015), занятие №2 - CSS
 
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
Курс по програмиране на C# 2013 - 7. Свойства. Индексатори. Наследяване. Изкл...
 
Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12Училищен курс по програмиране на C# (2013/2014), занятие №12
Училищен курс по програмиране на C# (2013/2014), занятие №12
 
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
Курс по програмиране на C# 2013 - 2. Конзолен вход и изход. Условни преходи. ...
 
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2015), занятие №3 - JavaScript (част 1/2)
 
Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9Училищен курс по програмиране на C# (2013/2014), занятие №9
Училищен курс по програмиране на C# (2013/2014), занятие №9
 
JDK 1.5 New Features
JDK 1.5 New FeaturesJDK 1.5 New Features
JDK 1.5 New Features
 
Курс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTMLКурс по уеб програмиране (2015), занятие №1 - HTML
Курс по уеб програмиране (2015), занятие №1 - HTML
 
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
Курс по информационни технологии (2013) - 1. Desktop приложения. Windows Form...
 
Въведение в Perl
Въведение в PerlВъведение в Perl
Въведение в Perl
 
Скаларни типове данни
Скаларни типове данниСкаларни типове данни
Скаларни типове данни
 
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
Курс по програмиране на C# 2013 - 6. Обектно-ориентирано програмиране. Класов...
 
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
Курс по уеб програмиране (2014), занятие №3 - JavaScript (част 1/2)
 
Основни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процесОсновни структури за управление на изчислителния процес
Основни структури за управление на изчислителния процес
 
Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++
 
Курс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSSКурс по уеб програмиране (2014), занятие №2 - CSS
Курс по уеб програмиране (2014), занятие №2 - CSS
 

Andere mochten auch

Introduction To Useful Wpf
Introduction To Useful WpfIntroduction To Useful Wpf
Introduction To Useful WpfBurke Holland
 
Организация и анализ на данни. Бейхан Данаджъ-ПГИ - Шумен
Организация и анализ на данни. Бейхан Данаджъ-ПГИ - ШуменОрганизация и анализ на данни. Бейхан Данаджъ-ПГИ - Шумен
Организация и анализ на данни. Бейхан Данаджъ-ПГИ - ШуменAdelina Peneva - Club "History"
 
Ускоряване на World Wide Wait
Ускоряване на World Wide WaitУскоряване на World Wide Wait
Ускоряване на World Wide WaitSEOM
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоDAVID Academy
 
НВО 7 клас 2014
НВО 7 клас 2014НВО 7 клас 2014
НВО 7 клас 2014Az Vulev
 
пробен дзи 2013
пробен  дзи 2013пробен  дзи 2013
пробен дзи 2013Velikova31
 
Задачи върху съседни и противоположни ъгли
Задачи върху съседни и противоположни ъглиЗадачи върху съседни и противоположни ъгли
Задачи върху съседни и противоположни ъглиMariq Kokalanova
 
Лица задачи върху готови чертежи
Лица задачи върху готови чертежиЛица задачи върху готови чертежи
Лица задачи върху готови чертежиMariq Kokalanova
 
задачи върху готови чертежи признаци за еднаквост триъгълници
задачи върху готови чертежи   признаци за еднаквост триъгълницизадачи върху готови чертежи   признаци за еднаквост триъгълници
задачи върху готови чертежи признаци за еднаквост триъгълнициMariq Kokalanova
 
Ms office word 2007
Ms office word 2007Ms office word 2007
Ms office word 2007club23
 
Basic networking
Basic networkingBasic networking
Basic networkingajeeshr3
 
MS Excel - логическата функция IF
MS Excel - логическата функция IF MS Excel - логическата функция IF
MS Excel - логическата функция IF nad_and
 
ИТ - MS Excel - Проектиране на таблици
ИТ - MS Excel - Проектиране на таблициИТ - MS Excel - Проектиране на таблици
ИТ - MS Excel - Проектиране на таблициnad_and
 
видове триъгълници според страните урок 67
видове триъгълници според страните урок 67видове триъгълници според страните урок 67
видове триъгълници според страните урок 67Светла Събева
 
ИТ - начален преговор за 7 клас
ИТ - начален преговор за 7 класИТ - начален преговор за 7 клас
ИТ - начален преговор за 7 класnad_and
 
Забавни задачи по математика
Забавни  задачи по  математика Забавни  задачи по  математика
Забавни задачи по математика Павлина Иванова
 

Andere mochten auch (20)

Introduction To Useful Wpf
Introduction To Useful WpfIntroduction To Useful Wpf
Introduction To Useful Wpf
 
Шумен Севим 10 д - ПГИ
Шумен   Севим 10 д - ПГИШумен   Севим 10 д - ПГИ
Шумен Севим 10 д - ПГИ
 
Организация и анализ на данни. Бейхан Данаджъ-ПГИ - Шумен
Организация и анализ на данни. Бейхан Данаджъ-ПГИ - ШуменОрганизация и анализ на данни. Бейхан Данаджъ-ПГИ - Шумен
Организация и анализ на данни. Бейхан Данаджъ-ПГИ - Шумен
 
Ускоряване на World Wide Wait
Ускоряване на World Wide WaitУскоряване на World Wide Wait
Ускоряване на World Wide Wait
 
Ravnob.triagalnik
Ravnob.triagalnikRavnob.triagalnik
Ravnob.triagalnik
 
Училищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - ПомагалоУчилищен курс по програмиране на C# (2013/2014) - Помагало
Училищен курс по програмиране на C# (2013/2014) - Помагало
 
НВО 7 клас 2014
НВО 7 клас 2014НВО 7 клас 2014
НВО 7 клас 2014
 
пробен дзи 2013
пробен  дзи 2013пробен  дзи 2013
пробен дзи 2013
 
Задачи върху съседни и противоположни ъгли
Задачи върху съседни и противоположни ъглиЗадачи върху съседни и противоположни ъгли
Задачи върху съседни и противоположни ъгли
 
Лица задачи върху готови чертежи
Лица задачи върху готови чертежиЛица задачи върху готови чертежи
Лица задачи върху готови чертежи
 
Mat
MatMat
Mat
 
задачи върху готови чертежи признаци за еднаквост триъгълници
задачи върху готови чертежи   признаци за еднаквост триъгълницизадачи върху готови чертежи   признаци за еднаквост триъгълници
задачи върху готови чертежи признаци за еднаквост триъгълници
 
Ms office word 2007
Ms office word 2007Ms office word 2007
Ms office word 2007
 
Basic networking
Basic networkingBasic networking
Basic networking
 
MS Excel - логическата функция IF
MS Excel - логическата функция IF MS Excel - логическата функция IF
MS Excel - логическата функция IF
 
Zabavna matematika(2)
Zabavna matematika(2)Zabavna matematika(2)
Zabavna matematika(2)
 
ИТ - MS Excel - Проектиране на таблици
ИТ - MS Excel - Проектиране на таблициИТ - MS Excel - Проектиране на таблици
ИТ - MS Excel - Проектиране на таблици
 
видове триъгълници според страните урок 67
видове триъгълници според страните урок 67видове триъгълници според страните урок 67
видове триъгълници според страните урок 67
 
ИТ - начален преговор за 7 клас
ИТ - начален преговор за 7 класИТ - начален преговор за 7 клас
ИТ - начален преговор за 7 клас
 
Забавни задачи по математика
Забавни  задачи по  математика Забавни  задачи по  математика
Забавни задачи по математика
 

Ähnlich wie Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)

Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLDAVID Academy
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkciiIvan Peev
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииDAVID Academy
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
 
Информационни системи - упражнение № 2
Информационни системи - упражнение № 2Информационни системи - упражнение № 2
Информационни системи - упражнение № 2Tsvetelin Pavlov
 

Ähnlich wie Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2) (7)

Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQLКурс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
Курс по информационни технологии (2013) - 3. ADO.NET, LINQ to SQL
 
18 operatori i funkcii
18 operatori i funkcii18 operatori i funkcii
18 operatori i funkcii
 
R
RR
R
 
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функцииКурс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
Курс по програмиране на C# 2013 - 9. Делегати. Събития. Ламбда функции
 
Writing tests in Go
Writing tests in GoWriting tests in Go
Writing tests in Go
 
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
 
Информационни системи - упражнение № 2
Информационни системи - упражнение № 2Информационни системи - упражнение № 2
Информационни системи - упражнение № 2
 

Mehr von DAVID Academy

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLDAVID Academy
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияDAVID Academy
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesDAVID Academy
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkDAVID Academy
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...DAVID Academy
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеDAVID Academy
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоDAVID Academy
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияDAVID Academy
 

Mehr von DAVID Academy (8)

Курс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTMLКурс по уеб програмиране (2014), занятие №1 - HTML
Курс по уеб програмиране (2014), занятие №1 - HTML
 
Училищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - УпражненияУчилищен курс по програмиране на C# (2013/2014) - Упражнения
Училищен курс по програмиране на C# (2013/2014) - Упражнения
 
Курс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web ServicesКурс по информационни технологии (2013) - 5. HTTP & Web Services
Курс по информационни технологии (2013) - 5. HTTP & Web Services
 
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET FrameworkКурс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
Курс по информационни технологии (2013) - 4. XML, XSD, XML в .NET Framework
 
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
Курс по информационни технологии (2013) - 2. Бази данни. Системи за управлени...
 
Курс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. ПредставянеКурс по информационни технологии (2013) - 0. Представяне
Курс по информационни технологии (2013) - 0. Представяне
 
Курс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - ПомагалоКурс по информационни технологии (2013) - Помагало
Курс по информационни технологии (2013) - Помагало
 
Курс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - УпражненияКурс по програмиране на C# (2013) - Упражнения
Курс по програмиране на C# (2013) - Упражнения
 

Курс по уеб програмиране (2015), занятие №4 - JavaScript (част 2/2)

  • 1. 2015 Курс по уеб програмиране Занятие №4 JavaScript (част 2)
  • 2. Съдържание • Функции (продължение) • Масиви • Асоциативни масиви • Обекти • Document Object Model (DOM) • jQuery
  • 3. Функции • Наименованията на функциите са променливи • Функциите са стойности (от тип Function) • Функциите могат да бъдат анонимни (без наименование) • Като следствие, функциите могат да се – съхраняват в променливи – извикват с методите call и apply – предават като аргументи към други функции – връщат като резултат от изпълнението на други функции • Функциите могат да бъдат влагани (closures) – Тялото на една функция може да съдържа други функции
  • 4. Функции • Създаване на анонимна функция – Със стандартна декларация • Синтаксис function ([параметър-1[, параметър-2…]]) { тяло-на-функцията } • Пример function () { } function () { console.log("Hello!"); } function (a, b) { return a + b; }
  • 5. Функции • Създаване на анонимна функция – С оператора new и идентификатора Function – като низови аргументи се подават наименованията на параметрите (ако има такива) и тялото на функцията • Синтаксис new Function() // празна функция new Function([аргумент-1, [аргумент-2, […]], тяло) • Пример new Function() new Function('console.log("Hello!")') new Function('a', 'b', 'return a + b')
  • 6. Функции • Съхраняване на функции в променливи – Става по същия начин, като с променливи от друг тип • Синтаксис променлива = стойност-или-израз-връщащ-функция • Пример (следните съждения правят едно и също нещо // стандартна декларация на функция function sumFunc(a, b) { return a + b; } // присвояване на анонимна функция на променлива sumFunc = function (a, b) { return a + b; } // присвояване на създадена с new анонимна функция на променлива sumFunc = new Function('a', 'b', 'return a + b');
  • 7. Функции • Функциите могат да се извикват с методите call и apply – Методът call – извиква функцията с подадени аргументи • Синтаксис функция.call(контекст[, аргумент-1[, аргумент-2[, …]]]) • Пример sumFunc.call(null, 3, 5) – Методът apply – извиква функцията с подаден масив от аргументи • Синтаксис функция.apply(контекст[, масив-от-аргументи]) • Пример sumFunc.apply(null, [3, 5])
  • 8. Функции • Предаване на функции като аргумент – Става по същия начин, като с променливи от друг тип – Функцията setInterval – указва подадена като аргумент функция да се изпълнява периодично през посочен интервал от време и връща идентификатор на таймера • Синтаксис setInterval(функция, милисекунди[, език]) • Пример // всяка секунда (1000 ms) в конзолата ще се появява ред „Тик-так.“ intervalTimerId = setInterval( function () { console.log("Тик-так."); }, 1000);
  • 9. Функции • Предаване на функции като аргумент – Става по същия начин, като с променливи от друг тип – Функцията clearInterval – прекратява периодичните извиквания указани от посочения идентификатор на таймера • Синтаксис clearInterval(идентификатор) • Пример clearInterval(intervalTimerId);
  • 10. Функции • Предаване на функции като аргумент – Става по същия начин, като с променливи от друг тип – Функцията setTimeout – указва подадената като аргумент функция да се изпълнява еднократно след посочен интервал от време и връща идентификатор на таймера • Синтаксис setTimeout(функция, милисекунди) • Пример // след 10 секунди (10000 ms) в конзолата ще се появява ред „Хоп!“ timeoutTimerId = setTimeout( function () { console.log("Хоп!"); }, 10000);
  • 11. Функции • Предаване на функции като аргумент – Става по същия начин, като с променливи от друг тип – Функцията clearTimeout – отказва еднократното извикване указано от посочения идентификатор на таймера • Синтаксис clearTimeout(идентификатор) • Пример clearTimeout(timeoutTimerId);
  • 12. Функции • Връщане на функции като резултат от други функции – Става по същия начин, като с променливи от друг тип – Пример function getFunctionForOperation(op) { switch (op) { case '+': return function (a, b) { return a + b; }; case '-': return function (a, b) { return a - b; }; } }
  • 13. Функции • Връщане на функции като резултат от други функции – Става по същия начин, като с променливи от друг тип – Функциите позволяват затваряне (closure) – запазване областта на видимост (свободни, нелокални променливи) – функцията работи в своя лексикален обсег – Пример function getTextFunc() { var name = 'Курс по програмиране'; var getName = function () { return name; } return getName; } var func = getTextFunc(); alert(func.call(null));
  • 14. Функции • Функцията eval – Изпълнява JavaScript код подаден като низов аргумент – Кодът може да представлява променлива, израз, съждение или множество от съждения – Функцията връща като резултат резултата от изпълнението на кода – Синтаксис eval(низ) – Пример var code = prompt('Въведете JavaScript код'); if (code !== null && code !== '') { var result = eval(code); alert('Резултатът е ' + result); }
  • 15. Функции – упражнение 1. Създайте нов файл с наименование „functions2.html” 2. Създайте нов файл с наименование „functions2.js” и го реферирайте от файла „functions2.html” 3. Напишете функция „showTime”, която извежда текущото време в конзолата, и функция „showCounter”, която увеличава даден брояч при всяко извикване и показва стойността му в конзолата 4. Напишете функция „startTask”, която стартира периодичното извикване на подадена функция през 1 секунда, функция „stopTask”, която го спира, и функция „toggleTask“, която пуска/спира поставена задача 5. Добавете бутон „Toggle Clock”, който пуска/спира извеждането на текущото време в конзолата, и бутон „Toggle Counter”, който пуска/спира извеждането на брояча в конзолата
  • 16. Масиви • Какво е „масив“? – Структура от данни, от тип Array – Представлява множество от стойности – Само едно измерение – Обръщението към всяка стойност става по номер – Могат да бъдат добавяни и премахвани стойности • Характеристики на масивите в JavaScript – Референтен тип данни – Размерност
  • 17. Масиви • Създаване на масив – С оператора new и думата Array • Синтаксис new Array() // празен масив new Array(големина) // масив с посочена големина new Array(стойност-1, стойност-2[,…]) // масив от подадени стойности • Пример var primeNumbers = new Array(2, 3, 5, 7, 11)
  • 18. Масиви • Създаване на масив – В квадратни скоби се изброяват нула или повече стойности • Синтаксис [[стойност-1[, стойност-2[,…]]]] • Пример // създава масив от 5 прости числа и го запазва променлива var primeNumbers = [2, 3, 5, 7, 11];
  • 19. Масиви • Взимане големината на масив – Свойството length – указва текущия брой елементи в масива • Синтаксис масив.length • Пример // извежда в конзолата броя елементи в масива primeNumbers console.log(primeNumbers.length);
  • 20. Масиви • Достъпване на елемент от масив – След променлива или израз, който връща масива, в квадратни скоби се указва поредният номер (индексът) на елемента (броенето започва от 0) • Синтаксис масив[индекс] • Пример // извежда в конзолата елемента с индекс 3 (т.е. 4-ти по ред) console.log(primeNumbers[3]);
  • 21. Масиви • Цикъл за обхождане на масив (for…in) – Обхожда изброимите елементи на масива – Синтаксис for (var идентификатор in масив) { съждение-или-блок; } – Пример for (var i in primeNumbers) { console.log('primeNumbers[' + i + '] = ' + primeNumbers[i]); }
  • 22. Масиви • Изтриване на елемент с оператора delete – Присвоява специалната стойност undefined • Синтаксис delete масив[индекс] • Пример // задава стойност undefined на елемента с индекс 3 (т.е. 4-ти по ред) delete primeNumbers[3];
  • 23. Масиви • Добавяне на стойност към съществуващ масив – Методът push – добавя стойност към края на масива и връща новата му големина • Синтаксис масив.push(стойност); • Пример var length = primeNumbers.push(13); – Методът unshift – добавя стойност към началото на масива и връща новата му големина • Синтаксис масив.unshift(стойност); • Пример var length = primeNumbers.unshift(13);
  • 24. Масиви • Премахване на стойност от съществуващ масив – Методът pop – премахва стойност от края на масива и връща стойността • Синтаксис масив.pop(); • Пример var primeNumber = primeNumbers.pop(); – Методът shift – премахва стойност от началото на масива и връща стойността • Синтаксис масив.shift(); • Пример var primeNumber = primeNumbers.shift();
  • 25. Масиви • Добавяне/премахване на стойности от съществуващ масив – Методът splice – добавя/премахва стойности от масива и връща получилия се масив • Синтаксис масив.splice(индекс, брой-елементи-за-премахване[, стойности]); • Пример // премахва един (1) елемент от позиция 0 (началото) на масива // и добавя два елемента (1 и 2) primeNumbers.splice(0, 1, 1, 2); // премахва нула (0) елемента от позиция 3 на масива // и добавя един елемент (3) primeNumbers.splice(3, 0, 3); // премахва два (2) елемента от позиция 5 на масива primeNumbers.splice(5, 2);
  • 26. Масиви • Извличане на подмасив – Методът slice – връща подмасив на съществуващ масив • Синтаксис масив.slice(индекс-начало[, индеx-край]); • Пример // връща подмасива от елемента с индекс 3 // до края на масива var somePrimeNumbers = primeNumbers.slice(3); // връща подмасива от елемента с индекс 5 // до елемента с индекс 7 var somePrimeNumbers = primeNumbers.slice(5, 7); // връща подмасива от елемента с индекс 5 // до предпоследния елемент var somePrimeNumbers = primeNumbers.slice(5, -1);
  • 27. Масиви • Слепване на масиви – Методът concat – връща слепен от множество масиви масив • Синтаксис масив-1.concat(масив-2[, масив-3[, …]]); • Пример // връща слят масив от прости числа, четни числа и числа на Фибоначи var numbers = primeNumbers.concat(evenNumbers, fibonacciNumbers);
  • 28. Масиви • Търсене в масив – Методът indexOf – търси стойност в масива, като започва търсенето от началото (или посочен индекс) към края, и връща нейния индекс (или -1, ако стойността не е намерена) • Синтаксис масив.indexOf(стойност[, индекс]); • Пример // търси числото 2 в масив от прости числа, // като започва от числото с индекс 3 var indexOf2 = primeNumbers.indexOf(2, 3);
  • 29. Масиви • Търсене в масив – Методът lastIndexOf – търси стойност в масива, като започва търсенето от края (или посочен индекс) към началото, и връща нейния индекс (или -1, ако стойността не е намерена) • Синтаксис масив.lastIndexOf(стойност[, индекс]); • Пример // търси числото 2 отзад-напред в масив от прости числа, // като започва от числото с индекс 3 var indexOf2 = primeNumbers.lastIndexOf(2, 3);
  • 30. Масиви • Други операции с масиви – Методът reverse – обръща масива отзад-напред – Методът sort – сортира масива (по подразбиране, като низове, или по подадено правило) – Методът join – слива стойностите на масив в низ (по подразбиране със запетая или с подаден делител) • Синтаксис масив.join([делител]); • Пример var tags = ['Ябълки', 'Круши', 'Домати', 'Краставици']; // в променлива записваме низ от всички думи // в масива разделени със запетая var displayText = tags.join(',');
  • 31. Масиви • Масиви от масиви (назъбени масиви) – Масиви, стойностите в които са масиви – Всеки масив в масива може да има различна големина – Когато големината на всички масиви е еднаква, ефективно се получава двумерен масив • Приложение на масивите от масиви – Могат да бъдат използвани за симулиране на двумерни масиви – Съхранение на еднотипни (със сходен смисъл масиви) с различна големина
  • 32. Масиви • Създаване на масив от масиви – Създаването става като на обикновен масив, но всяка от стойностите може да бъде новосъздаден масив, променлива или израз даващ като резултат масив • Пример // създава масив от оценките на учениците в един клас, // като първият индекс е поредният номер на ученика (започващ от 0), // а вторият индекс е поредната оценка var studentMarks = [ [6, 6, 3, 5], // за № 0 marksFromKeyboard, // за № 1, marksFromKeyboard – масив existingMarks.concat(marksFromDatabase) // за № 2, добавяме от БД ];
  • 33. Масиви • Променливата arguments – Съществува в тялото на всяка функция – Прилича на масив от подадените на функцията аргументи – Позволява реализирането на функции с произволен брой параметри – Пример function pushMany(array) { for (var i in arguments) { if (i > 0) { array.push(arguments[i]); } } }
  • 34. Масиви • Променливата arguments – Свойството callee – връща описание на извиканата функция – Свойството callee.caller – връща описание на извикващата функция – Пример (свойството name не се поддържа в Internet Explorer) function eeyore() { var me = arguments.callee; var they = me.caller; console.log(they.name + ' called ' + me.name); } function pooh() { eeyore(); }
  • 35. Масиви – упражнение 1. Създайте нов файл с наименование „numbers.html” 2. Създайте нов файл с наименование „numbers.js” и го реферирайте от файла „numbers.html” 3. Създайте масива „primeNumbers” и напишете функция, която да го попълни с простите числа в интервала [1; 1000) 4. Оптимизирайте намирането на прости числа така, че търсенето на делители да се извършва само сред прости числа 5. Създайте масива „fibonacciNumbers” и напишете функция, която да го попълни с числата на Фибоначи в интервала [0; 1000) 6. Създайте масива „kewlNumbers” и напишете функция, която да го попълни с числата, които се повтарят в масивите „primeNumbers” и „fibonacciNumbers” 7. Изведете трите масива в конзолата
  • 36. Масиви – упражнение 1. Създайте нов файл с наименование „student_info.html” 2. Създайте нов файл с наименование „student_info.js” и го реферирайте от файла „student_info.html” 3. Създайте масивите „studentNames”, „studentMarks” и „studentAverages”, които да съхраняват списъци с имената на ученици, годишните им оценки по различните предмети и средните им годишни оценки 4. Напишете скрипт, който въвежда информация за ученик, така че: 1. Подканва потребителя да въведе имената на ученика и ги добавя в „studentNames” 2. Подканва потребителя да въведе годишните оценки на ученика разделени с интервал, разделя ги и ги записва като масив в „studentMarks” 3. Пита потребителя дали иска да въведе информацията за друг ученик (функцията „confirm”) 4. Ако потребителят избере да въведе информацията за друг ученик, отива в т.1 5. В масива „studentAverages” записва средните годишни оценки на учениците 6. Извежда в HTML документа данните в табличен вид
  • 37. Асоциативни масиви • Какво е „асоциативен масив“? – Структура от данни, от тип Object – Представлява множество от двойки ключ-стойност – Само едно измерение – Обръщението към всяка стойност става по ключ – Могат да бъдат добавяни и премахвани стойности • Характеристики на асоциативните масивите в JavaScript – Референтен тип данни
  • 38. Асоциативни масиви • Създаване на асоциативен масив – С оператора new и думата Object • Синтаксис new Object() // празен асоциативен масив • Пример var studentInfo = new Object()
  • 39. Асоциативни масиви • Създаване на асоциативен масив – Ключът и стойността за разделени с двуеточие (“:”) – Различните двойки са разделени със запетая (“,”) – Във фигурни скоби се изброяват двойки ключ-стойности – Ключовете могат да са низови • Синтаксис {[низ-1: стойност-1[, низ-2:стойност-2[,…]]]} • Пример // създава асоциативен масив описващ англо-български речник var dictionary = { "example": 'I. (n) Пример, образец, модел; II. (n) Назидание, поука, урок; III. (v) Служа за пример, давам като пример', "excelsior": 'I. (int лат.) (все) по-нагоре! II. (n) фин талаш (за опаковка)' };
  • 40. Асоциативни масиви • Създаване на асоциативен масив – Ключът и стойността за разделени с двуеточие (“:”) – Различните двойки са разделени със запетая (“,”) – Във фигурни скоби се изброяват двойки ключ-стойности – Ключовете могат да са идентификатори • Синтаксис {[идентификатор-1: стойност-1[, идентификатор-2: стойност-2[,…]]]} • Пример // създава асоциативен масив описващ информация за ученик var studentInfo = { names: "Иванчо Марийкин", marks: [2, 2, 4, 3, 4] };
  • 41. Асоциативни масиви • Създаване на асоциативен масив – Ключът и стойността за разделени с двуеточие (“:”) – Различните двойки са разделени със запетая (“,”) – Във фигурни скоби се изброяват двойки ключ-стойности – Ключовете могат да са смесени • Синтаксис {[ключ-1: стойност-1[, ключ-2:стойност-2[,…]]]} • Пример // създава асоциативен масив описващ информация за ученик var studentInfo = { names: "Иванчо Марийкин", "marks": [2, 2, 4, 3, 4] };
  • 42. Асоциативни масиви • Достъпване на елемент от асоциативен масив – След променлива или израз, който връща масива, в квадратни скоби се указва низовият ключ на елемента • Синтаксис масив[ключ] • Пример // извежда в конзолата превода на думата “example” console.log(dictionary["example"]); – След променлива или израз, който връща масива, и оператора “.”, указва идентификатора на елемента • Синтаксис масив.ключ • Пример // извежда в конзолата имената на ученика console.log(studentInfo.names);
  • 43. Асоциативни масиви • Цикъл за обхождане на асоциативен масив (for…in) – Обхожда изброимите елементи на масива – Синтаксис for (var идентификатор in масив) { съждение-или-блок; } – Пример for (var key in studentInfo) { console.log('studentInfo["' + key + '"] = ' + studentInfo[key]); }
  • 44. Асоциативни масиви • Премахване на елемент с оператора delete – Премахва напълно посочения елемент от асоциативния масив • Синтаксис delete масив.ключ delete масив[ключ] • Пример // премахва елемента с ключ “names” delete studentInfo.names; // премахва елемента с ключ “marks” delete studentInfo["marks"];
  • 45. Асоциативни масиви • Разлика между обикновените и асоциативните масиви – Асоциативните масиви нямат свойство за определяне на големина – Асоциативните масиви нямат редица методи достъпни при обикновените списъци – Елементите на асоциативните масиви могат да се изтриват с оператора delete
  • 46. Асоциативни масиви – упражнение 1. Създайте нов файл с наименование „student_info2.html” 2. Създайте нов файл с наименование „student_info2.js” и го реферирайте от файла „student_info2.html” 3. Създайте масива „students”, които да съхраняват информацията за учениците 4. Напишете скрипт, който въвежда информация за ученик, така че: 1. Създава асоциативен списък с информация за ученик 2. Подканва потребителя да въведе имената на ученика и ги добавя с ключ „names” 3. Подканва потребителя да въведе годишните оценки на ученика разделени с интервал, разделя ги и ги записва с ключ „marks” 4. Пита потребителя дали иска да въведе информацията за друг ученик (функцията „confirm”) 5. Ако потребителят избере да въведе информацията за друг ученик, отива в т.1 5. В масива „students” записва средните годишни оценки на учениците с ключ „average” 6. Извежда в HTML документа данните в табличен вид
  • 47. Обекти • Какво е „обектно-ориентирано програмиране“? – Парадигма (подход) в програмирането – Програмният код се разбива на части (обекти) – Обектите се характеризират с данни и функции (характеристики и поведение) – Обектите си взаимодействат – различни начини – Три основни принципа: • Капсулиране • Наследяване • Полиморфизъм – Обектите са организирани в класове, които дават техните особености
  • 48. Обекти • Какво е „прототипно-базирано програмиране“? – Стил в обектно-ориентираното програмиране – Няма класове, има прототипи – Няма наследяване на класове, има клониране и декориране на прототипи • JavaScript е прототипно-базиран език за програмиране • Вградени обекти – Такива са Object, Array, String и Math • Програмистите могат да създават свои обекти – Вместо класове се дефинират функции
  • 49. Обекти • Обектите в JavaScript – Обектите са функции и функциите са обекти – Конструктор на обекта е тялото на функцията • Конструктор е кодът изпълняван при създаване на копие на обекта – Данните на обекта са двойки от типа идентификатор-стойност • Реализирани като асоциативен списък
  • 50. Обекти • Създаване на клас – Със стандартна декларация на функция • Синтаксис function име-на-клас([параметър-1[, параметър-2…]]) { тяло-на-конструктора } • Пример function Animal(name) { console.log('Току-що бе създаден Animal обект с име ' + name); } – Със стандартна декларация на асоциативен масив • Синтаксис име-на-клас = { }; • Пример Animal = { };
  • 51. Обекти • Достъпване на прототипа на клас – Със специалното свойство на класа prototype • Синтаксис име-на-клас.prototype име-на-клас["prototype"] • Пример Animal.prototype Animal["prototype"]
  • 52. Обекти • Добавяне на свойства към прототип – Добавените към прототипа свойства се споделят от всички копия на прототипа – По същите начини като добавяне на стойности към асоциативен масив • Синтаксис име-на-клас.prototype.име-на-свойство = стойност-или-израз име-на-клас["prototype"].име-на-свойство = стойност-или-израз име-на-клас.prototype["име-на-свойство"] = стойност-или-израз име-на-клас["prototype"]["име-на-свойство"] = стойност-или-израз • Пример Animal.prototype.makeSound = function() { console.log('…'); }
  • 53. Обекти • Премахване на свойства от прототип – Премахнатите от прототипа свойства се премахват от всички копия на прототипа – По същите начини като премахване на стойности от асоциативен масив • Синтаксис delete име-на-клас.prototype.име-на-свойство delete име-на-клас["prototype"].име-на-свойство delete име-на-клас.prototype["име-на-свойство"] delete име-на-клас["prototype"]["име-на-свойство"] • Пример delete Animal.prototype.makeSound;
  • 54. Обекти • Добавяне на свойства към обекта – Добавено към обекта свойство се добавя само за текущото копия – По същите начини като добавяне на стойности към асоциативен масив • Синтаксис име-на-обект.име-на-свойство = стойност-или-израз име-на-обект["име-на-свойство"] = стойност-или-израз • Пример animal.makeSound = function() { console.log('Бау!'); }
  • 55. Обекти • Премахване на свойства от обект – Премахнато от обекта свойство се премахва само от текущото копие – По същите начини като премахване на стойности от асоциативен масив • Синтаксис delete име-на-обект.име-на-свойство delete име-на-обект["име-на-свойство"] • Пример delete animal.makeSound;
  • 56. Обекти • Запазената дума this – Има различна стойност според контекста – Връща обекта, представляващ настоящия контекст – Според случая, контекстът приема следните стойности: • В глобалния контекст – текущия прозорец • В изпълняван от функцията eval код – При директно извикване – не се променя – При индиректно извикване – все едно е в глобалния контекст • В кода на функция – Ако функцията е свойство на обект – обекта, в който е функцията – В някои от вградените функции – подава се като аргумент – В останалите случаи – все едно е в глобалния контекст
  • 57. Обекти • Добавяне на свойства към обекта в конструктора – В конструктора могат да бъдат добавени свойства с използване на запазената дума this • Синтаксис this.име-на-свойство[ = стойност-или-израз] this["име-на-свойство"][ = стойност-или-израз] • Пример function Animal(name) { // създава свойството _name и му дава стойност от параметъра this._name = name; this.getName = function() { return this._name; } console.log('Току-що бе създаден Animal обект с име ' + name); }
  • 58. Обекти • Наследяване – Класовете могат да се декларират така, че те (наследниците) да наследяват свойствата на други класове (родители) – Наследниците могат да добавят и премахват наследените от родителите свойства – Наследяването се реализира чрез копиране на прототипи – Реализация на наследяването 1. Създаваме функция/асоциативен списък клас-наследник 2. Подменяме прототипа ѝ с обект от клас клас-родител 3. Подменяме конструктора в прототипа на клас-наследник с нов 4. В конструктора на клас-наследник се осъществява извикване към конструктора на клас-родител
  • 59. Обекти • Наследяване – Пример function Animal(name) { this._name = name; } // създаваме обща за всички обекти от клас Animal функция getName Animal.prototype.getName = function() { return this._name; } // създаваме клас Dog с конструктор Dog = function (name) { Animal.prototype.constructor.call(this, name); } // подменяме прототипа на Dog с този на Animal Dog.prototype = new Animal(); // възстановяваме конструктора на Dog Dog.prototype.constructor = Dog;
  • 60. Обекти • Проверка за наследници – Често се налага проверка дали един обект наследява друг обект – Запазената дума instanceof • Синтаксис обект instanceof конструктор • Пример var animal = new Animal('Sparky'); console.log(animal instanceof Animal); console.log(animal instanceof Dog); var dog = new Dog('Barky'); console.log(dog instanceof Animal); console.log(dog instanceof Dog); console.log(Dog.prototype instanceof Animal);
  • 61. Обекти • Методът Object.create (ECMAScript 5.1+) – Създава обект с подаден прототип (и свойства) – Синтаксис Object.create(прототип[, асоциативен-списък-от-свойства]) – Пример var animal = Object.create(Animal.prototype, { "_name": 'Кучо', "_age": 3, "_sound": 'Джаф!' });
  • 62. Обекти • Наследяване с Object.create (ECMAScript 5.1+) – Пример function Animal(name) { this._name = name; } // създаваме обща за всички обекти от клас Animal функция getName Animal.prototype.getName = function() { return this._name; } // създаваме клас Dog с конструктор Dog = function (name) { Animal.prototype.constructor.call(this, name); } // създаваме нов обект с подаден прототип Dog.prototype = Object.create(Animal.prototype); // възстановяваме конструктора на Dog Dog.prototype.constructor = Dog;
  • 63. Обекти • Обобщение на малко терминология – Функция – член на типа Object, наследник на стандартния вграден конструктор Function – Вградена функция – вграден обект, който е функция – Свойство – асоциация между наименование и стойност, която е част от обект – Метод – функция, която е стойност на свойство – Вграден метод – метод, който е вградена функция – Собствено свойство – свойство директно съдържано от обект – Наследено свойство – свойство на обект, което не негово собствено, а собствено или наследено от прототипа му
  • 64. Обекти – упражнение 1. Създайте нов файл с наименование „cosmos.html” 2. Създайте нов файл с наименование „cosmos.js” и го реферирайте от файла „cosmos.html” 3. Създайте клас „CelestialBody” със свойства „_name”, „_coordinates”, „_mass” и „_age”, както и конструктор, който приема като параметър „name” 4. Наследете класа „CelestialBody” с клас „Sun“ със свойства „_isSupernova” и „_metallicity”, както и конструктор, който приема като параметри „name” и „isSupernova” 5. Наследете класа „CelestialBody” с клас „Planet“ със свойства „_sun” и „_hasAtmosphere”, както и конструктор, който приема като параметри „name”, „sun” и „hasAtmosphere” 6. Подменете метода „toLocaleString” в прототипа на „CelestialBody”, така че да върне низ с информацията за съответния обект 7. Създайте масив от няколко различни „Sun“ и „Planet“ обекта и изведете в информацията от метода „toLocaleString” за всички елементи в масива
  • 65. Document Object Model (DOM) • Какво е „Document Object Model”? – Програмен интерфейс за връзка с HTML и XML документи – Структурирано йерархично представяне на документа – Структурата и свойствата в DOM мога да бъдат променяни – Промяната може да промени структурата, съдържанието и оформлението на документа – Свързващо звено между документа и езика за програмиране
  • 66. Document Object Model (DOM) • Какво е „Document Object Model”?
  • 67. Document Object Model (DOM) • Основни положения в Document Object Model • Структурата е обектно-ориентирана • Всичко в Document Object Model е вид възел (Node) – Документът, като такъв, е документен възел – Всички елементи са елементни възли – Всички атрибути са атрибутни възли – Текстът в елементите са текстови възли – Коментарите са коментарни възли • Всеки вид възел има своите свойства и методи
  • 68. Document Object Model (DOM) • Йерархия на класовете в Document Object Model
  • 69. Document Object Model (DOM) • Интерфейсът Node • Представлява възел, основен обект за Document Object Model • Основни свойства – Свойството attributes – масив от атрибутите на възела – Свойството childNodes – масив от подвъзли – Свойството firstChild – първи подвъзел – Свойството lastChild – последен подвъзел – Свойството nextSibling – следващ възел на същото ниво – Свойството nodeType – указва вида на възела – Свойството parentNode – родителски възел – Свойството previousSibling – предишен възел на същото ниво
  • 70. Document Object Model (DOM) • Интерфейсът Node • Представлява възел, основен обект за Document Object Model • Основни методи – Методът appendChild – добавя подвъзел към списъка подвъзли – Методът cloneNode – клонира възела – Методът removeChild – премахва подвъзел от списъка подвъзли – Методът replaceChild – подменя подвъзел в списъка подвъзли
  • 71. Document Object Model (DOM) • Интерфейсът ParentNode • Представлява възел, който може да има подвъзли • Основни свойства и методи – Свойството children – списък от всички елементи, на които възелът е родител – Свойството childElementCount – брой елементи във възела – Свойството firstElementChild – първият елемент, подвъзел на възела – Свойството lastElementChild – последният елемент, подвъзел на възела
  • 72. Document Object Model (DOM) • Интерфейсът ChildNode • Представлява възел, който може да има родителски възел • Основни свойства и методи – Свойството previousElementSibling – предишен елемент в списъка с елементи на родителския възел – Свойството nextElementSibling – следващ елемент в списъка с елементи на родителския възел – Методът remove – премахва възела от списъка с подвъзли на родителя – Методът before – вмъква подаден списък от възли преди настоящия възел в списъка от подвъзли на родителя – Методът after – добавя подаден списък от възли след настоящия възел в списъка от подвъзли на родителя
  • 73. Document Object Model (DOM) • Интерфейсът EventTarget • Представлява обект, който може да получава събития от DOM • За едно събитие могат да се „абонират“ получатели • При възникване на събитие, „абонатите“ се уведомяват последователно • Последен в списъка е браузерът с подразбиращо се поведение • Основни свойства и методи – Методът addEventListener – към списъка със „получатели“ на събития, добавя функция, която да обработва определено събитие – Методът removeEventListener – от списъка със „получатели“ на събития, премахва функция, която обработва определено събитие – Методът dispatchEvent – предизвиква случването на определено събитие, известявайки последователно списъка от „получатели“
  • 74. Document Object Model (DOM) • Интерфейсът Element • Специфичен тип възел, съответстващ на елемент в документа • Наследява свойствата на Node и EventTarget, имплементира ParentNode и ChildNode • Основни свойства – Свойството className – съдържа низ представляващ класа на елемента – Свойството clientHeight – вътрешна височина на елемента – Свойството clientTop – широчина на горната рамка на елемента – Свойството clientLeft – широчина на лявата рамка на елемента – Свойството clientWidth – вътрешна широчина на елемента – Свойството id – съдържа низ представляващ идентификатора на елемента – Свойството innerHTML – HTML код на съдържанието на елемента – Свойството outerHTML – HTML код на елемента и съдържанието му – Свойството tagName – наименованието на тага, с който е дефиниран елементът
  • 75. Document Object Model (DOM) • Интерфейсът Element • Специфичен тип възел, съответстващ на елемент в документа • Наследява свойствата на Node и EventTarget, имплементира ParentNode и ChildNode • Основни методи – Методът getAttribute – връща стойността на атрибута с посочено наименование – Методът getElementsByClassName – връща списък с елементите от посочен клас – Методът getElementsByTagName – връща списък с елементите с посочен таг – Методът hasAttribute – проверява дали е деклариран атрибут с посочено наименование – Методът setAttribute – установява стойност на посочен атрибут – Методът insertAdjacentHTML – обработва текст като HTML/XML и го вмъква на посочена позиция
  • 76. Document Object Model (DOM) • Интерфейсът Document • Входна точка към съдържанието на страницата • Предоставя функционалността глобална за документа • Основни свойства и методи – Свойството documentElement – елемента съответстващ на документа. За HTML документи това е HTML елемент – Свойството documentURI – адрес (URL) на документа – Методът createAttribute – създава нов атрибутен възел – Методът createCDATASection – създава нова CDATA секция – Методът createComment – създава нов коментарен възел – Методът createElement – създава нов елементен възел – Методът createTextNode – създава нов текстов възел – Методът getElementsByClassName – взима всички елементи от посочен клас – Методът getElementsByTagName – взима всички елементи с посочен таг
  • 77. Document Object Model (DOM) • Интерфейсът GlobalEventHandlers – Описва манипулаторите на събития (event handlers) общи за множество интерфейси – Основни манипулатори на събития • Свойството onfocus – фокусиране на съответния обект • Свойството onchange – промяна на съдържанието • Свойството onclick – настискане (с мишка или клавиатура) • Свойството oncontextmenu – извеждане на контекстно меню • Свойството onkeypress – натискане на клавиш от клавиатурата • Свойството onload – приключило зареждане • Свойството onshow – показване • Свойството onsubmit – изпращане (обикновено на форма)
  • 78. Document Object Model (DOM) • Обектът CSSStyleDeclaration – Описва множество от двойки CSS свойство-стойност – Свойствата му съответстват на различните CSS свойства, а стойностите им – на стойностите на CSS свойствата
  • 79. Document Object Model (DOM) • Интерфейсът HTMLElement • Специфичен тип възел, съответстващ на елемент в HTML документ • Наследява свойствата на Element и GlobalEventHandlers • Основни свойства и методи – Свойството style – CSSStyleDeclaration обект представляващ от CSS двойки свойство-стойност – Свойството title – низ появяващ се при заставане на мишката над елемента – Методът click – изпраща събитие за натискане на елемента – Методът focus – установява фокус над елемента
  • 80. Document Object Model (DOM) • Разширения на Document за HTML документи • Основни свойства и методи – Свойството body – дава <body> елемента на документа – Свойството cookie – взима разделени с „;“ бисквитки или установява бисквитка – Свойството forms – декларираните в документа форми – Свойството head – дава <head> елемента на документа – Свойството location – Location обект описващ местоположението на документа – Свойството referrer – адрес (URL) на страницата, от която се е стигнало до документа – Свойството title – низ представляващ заглавие на документа – Свойството URL – адрес (URL) на документа – Методът getElementsByName – взима всички елементи с посочено наименование – Методът getSelection – Selection обект, който описва маркирания текст – Методът hasFocus – връща true, ако фокусът се намира някъде в документа – Методът write – изписва посочения текст в документа
  • 81. Document Object Model (DOM) • Обектът Window • Отправна точка за достъп до Domain Object Model • Имплементира GlobalEventHandlers • Достъпен чрез глобалната променливата window • Променливата window се явява глобален контекст и съдържа всички глобални променливи (в т.ч. самата window) и функции • Основни свойства и методи – Свойството location – обект даващ достъп до местоположението на текущия документ – Свойството history – обект даващ достъп до „историята“ на текущата сесия – Свойството document – обект даващ достъп до текущия документ и имплементира интерфейсите Document и Node – Методите alert, confirm и prompt
  • 82. Document Object Model (DOM) • Обработка на събития свързани с елемент – На атрибута за събитие се присвоява стойност – Стойността тяло на анонимна функция – Първи аргумент е елементът, който е бил обект на събитието – Той е и контекст на извикването и съответно стои зад запазената дума this – Уведомяването за настъпване на събитията може да бъде прекъснато и подразбиращото се поведение на браузера - възпрепятствано, ако функцията или кодът в атрибута за събитие върне false
  • 83. Document Object Model (DOM) • Обработка на събития свързани с елемент – На атрибута за събитие се присвоява стойност – Пример <a href="http://acad.david.bg/" onclick="return confirm('Do you really want to go there?')"> ДАВИД академия </a>
  • 84. Document Object Model (DOM) • Манипулиране на свойствата на елемент – Трябва да разполагаме с обекта, който го представлява – След като разполагаме с елемента, свойствата на елемента могат да бъдат четени и променяни – Промяната на свойствата може да се отрази на външния вид, положението и поведението на съответния елемент в браузера
  • 85. Document Object Model (DOM) • Манипулиране на свойствата на елемент – Трябва да разполагаме с обекта, който го представлява – Можем да вземем обекта със запазената дума this, когато обработваме събитие – Пример <input type="button" value="Click me!" onclick="this.value = 'Thank you!'" />
  • 86. Document Object Model (DOM) • Манипулиране на свойствата на елемент – Трябва да разполагаме с обекта, който го представлява – Можем да потърсим елемента по идентификатор в документа (идентификаторите трябва да са уникални) – Пример <label for="url">URL:</label> <input id="url" type="text" /> <input type="button" value="Go" onclick="window.location = document.getElementById('url').value" />
  • 87. Document Object Model (DOM) • Манипулиране на свойствата на елемент – Трябва да разполагаме с обекта, който го представлява – Можем да потърсим елемента по наименование на класа му – Пример <div class="box-a">Box ?</div> <div class="box-b">Box ?</div> <div class="box-a">Box ?</div> <script> var elements = document.getElementsByClassName('box-a'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.innerHTML = 'Box A'; } </script>
  • 88. Document Object Model (DOM) • Манипулиране на свойствата на елемент – Трябва да разполагаме с обекта, който го представлява – Можем да потърсим елемента по наименование на тага му – Пример <div class="box-a">Box ?</div> <div class="box-b">Box ?</div> <div class="box-a">Box ?</div> <script> var elements = document.getElementsByTagName('div'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; element.innerHTML = 'Box'; } </script>
  • 89. Document Object Model (DOM) • Създаване и добавяне на елемент – Можем да създаваме елементи и да ги добавяме към други елементи – Пример <div id="box">Box</div> <script> var element = document.createElement('a'); element.href = 'http://acad.david.bg/'; element.innerHTML = 'ДАВИД академия'; var box = document.getElementById('box'); box.appendChild(element); </script>
  • 90. Document Object Model (DOM) • Премахване на елемент – Можем да премахваме елементи – Пример <div id="box"> <a href="http://google.com/">Google</div> </div> <script> var box = document.getElementById('box'); var elements = box.getElementsByTagName('a'); for (var i = 0; i < elements.length; i++) { var element = elements[i]; box.removeChild(element); } </script>
  • 91. Document Object Model (DOM) • Подменяне на елемент – Можем да подменим един елемент с друг – Пример <div id="box"> <a href="http://acad.david.bg/">ДАВИД академия</div> </div> <script> var box = document.getElementById('box'); var elements = box.getElementsByTagName('a'); for (var i = 0; i < elements.length; i++) { var oldElement = elements[i]; var newElement = document.createElement('a'); newElement.href = 'http://acad.david.bg/'; newElement.innerHTML = 'ДАВИД академия'; box.replaceChild(newElement, oldElement); } </script>
  • 92. Document Object Model (DOM) • Обобщение на някои възможности – Елементите могат да бъдат променяни – тяхното съдържание, техните свойства, техните атрибути – Елементите могат да бъдат добавяни/премахвани/подменяни – Елементите могат да бъдат размествани, украсявани, скривани, показвани…
  • 93. Document Object Model (DOM) – упражнение 1. Създайте нов файл с наименование „student_info3.html” 2. Създайте нов файл с наименование „student_info3.js” и го реферирайте от файла „student_info3.html” 3. В „student_info3.html” добавете таблица с форма за попълване на данни за ученик – име, презиме, фамилия, списък от оценки. Добавете също така празна таблица с ID „studentTable” 4. В „student_info3.js” добавете масив от информация за ученици „students”, функция „addStudent” за добавяне на ученик в списъка, изчисляване и записване на средния му успех, както и функция „showStudents” за извеждане на информацията за учениците в списъка в таблицата с ID „studentTable” 5. При натискане на бутон „Добави“, към списъка да се добави ученик с попълнената във формата информация и да се опресни таблицата „studentTable”
  • 94. jQuery • Какво е “jQuery”? – jQuery (www.jquery.com)е JavaScript библиотека от функции – Обектът jQuery е централен в jQuery библиотеката – Обектът jQuery е обвивка около един или повече DOM елемента – Обектът jQuery дава функции за значително по-лесна работа манипулация на DOM – Обектът jQuery дава функции за работа с данни и с мрежата – Обектът jQuery може да бъде разширяван с допълнителни функции
  • 95. jQuery • Първи стъпки в jQuery – Включване на jQuery в страница • Чрез изтегляне на jQuery библиотеката и реферирането му в страницата <script type="text/javascript" src="jquery.min.js"></script> • Чрез реферирането му директно от предпочитана мрежа за предоставяне на съдържание – CDN (Content Delivery Network) <script type="text/javascript" src="//code.jquery.com/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"></script> – Обектът jQuery има стандартен съкратен запис – $ – Много от методите приемат функции като параметри
  • 96. jQuery • Прихващане зареждането на DOM – Добре е изпълнението на скриптовете да започне, след като DOM е напълно зареден и готов за използване – $(функция) – задава функция, която да се изпълни, след като DOM е напълно зареден и готов за използване • Пример $(function () { alert('DОМ е готов. Ти си на ход!'); });
  • 97. jQuery • Обвиване на обект(и) с jQuery обект – $(селектор[, контекст]) – връща jQuery обвивка около намерени по посочен селектор елементи • Селекторът е същият като тези използвани в CSS • Търсенето става в целия документ, освен ако не е посочен контекст (DOM елемент, документ или jQuery обект) • Пример var header = $('header'); var sectionDates = $('section .date'); var logo = $('#logo'); – $(елемент) – връща jQuery обвивка около подаден DOM елемент • Пример var logo = $(document.getElementById('logo'));
  • 98. jQuery • Обвиване на обект(и) с jQuery обект – $(масив-от-елементи) – връща jQuery обвивка около подаден масив от DOM елементи • Пример var paragraphs = $(document.getElementsByTagName('p')); – $(обект) – връща jQuery обвивка около обикновен обект • Малък набор от операции се поддържат върху обикновени обекти • Пример var test = $({"Pi": Math.PI}); – $(jQuery-обект) – клонира jQuery обект • Когато се направи клонинг на съществуващ jQuery обект, който сочи към същите DOM елементи, като оригиналния
  • 99. jQuery • Създаване на елементи с jQuery – $(html[, документ]) – създава DOM елементи от подадения HTML (в подадения документ) и създава jQuery обвивка около тях • Ако подаденият низ не прилича на HTML, се интерпретира като селектор (вж. Обвиване на обекти с jQuery обект • Пример var jqObject = $('<p class="title">jQuery Rocks</p>'); – $(html, атрибути) – създава DOM елементи от подадения HTML с подадени (под формата на обект) атрибути, събития и методи, които да подаде на новосъздадения обект • Пример var jqObject = $('<p class="title">jQuery Rocks</p>', {"font-weight": 'bold'});
  • 100. jQuery • Методи за манипулиране на атрибутите на елемент – attr – взима или присвоява стойността на посочен атрибут на избрания елемент – val – взима или присвоява стойността на value атрибута на избрания елемент • Методи за управление на външния вид – show, hide и toggle – показва, скрива и превключва видимостта на избрания елемент – addClass и removeClass – добавя и премахва клас от избрания елемент – css – взима или присвоява стойността на style атрибута на избрания елемент
  • 101. jQuery • Mетоди на манипулиране на структурата на документа – text и html – връщат или присвояват комбинираното текстово съдържание и HTML съдържанието на избрания елемент – append и prepend – вмъква елемент в DOM след и преди избрания елемент – appendTo – добавя избрания елемент към списъка от поделементи на посочен елемент – before и after – вмъква посочено в аргумент съдържание преди и след всеки от избраните елементи – insertBefore и insertAfter – вмъква всеки от посочените елементи преди и след избрания елемент
  • 102. jQuery • Методи за реализиране на ефекти – аnimate – “анимира“ посочени CSS свойства на избрания елемент към посочени стойности – fadeIn, fadeOut, fadeTo и fadeToggle – изменят прозрачността на избрания елемент – slideUp, slideDown, slideToggle – скриват, показват и превключват видимостта на избрания елемент с плъзгащо движение
  • 103. jQuery • Методи за работа със събития – on и off – закачва се и се откачва от събитие за избрания елемент – one – закачва се за еднократно изпълнение при възникване на събитие за избрания елемент – event.stopPropagation – спира прихващането на събитието нагоре по DOM дървото – event.preventDefault – възпрепятства подразбиращото се действие на браузера – ready – указва функция, която да се изпълни при пълно зареждане на DOM. Методът е валиден само за документа – click – абонира се за събитието “click” на избрания елемент, или го предизвиква – …
  • 104. jQuery • Методи за работа с AJAX (Asynchronous JavaScript and XML) • Помощни методи – data – взима или съхранява данни асоциирани с елемента или избраните елементи – each – изпълнява посочена функция върху всеки елемент от избрано множество от елементи – toArray – превръща избраните елементи в масив – parseHTML – превръща форматиран като HTML низ и го превръща в DOM възли – parseJSON – превръща форматиран като JSON низ и го превръща в JavaScript обект – parseXML – превръща форматиран като XML низ и го превръща в XML документ
  • 105. jQuery – упражнение 1. Създайте нов файл с наименование „traffic_lights.html” 2. Създайте нов файл с наименование „traffic_lights.css” и го реферирайте от файла „traffic_lights.html”. Във файла добавете следния CSS клас: 3. В „traffic_lights.html” реферирайте jQuery от някой от достъпните CDN сървъри 4. Създайте нов файл с наименование „traffic_lights.js” и го реферирайте от файла „traffic_lights.html”. 5. Направете кутийка с черен (#000000) фон и три кръга (кутийки от клас „circle” в нея съответно с червен (#b80021), жълт (#de9400) и зелен (#3a6100) фон, стиловете на които също да бъдат в съответните класове 6. Направете функция „pulse“, която, използвайки функцията animate на jQuery, кара подадени като асоциативен списък свойства да „пулсира“ в подадени граници 7. Извикайте функцията „pulse“ за трите цветни кутийки, така че да непрозрачността им (свойството „opacity”) да „пулсира“ в граници от 0 до 1 8. Анимацията да се повтаря, докато не бъде натисната на черната кутийка .circle { width: 100px; height: 100px; border-radius: 50px; line-height: 100px; font-size: 20px; text-align: center; }
  • 107. Благодаря! • Валери Дачев – valery@david.bg – @vdachev – https://facebook.com/vdachev • ДАВИД академия – acad@david.bg – http://acad.david.bg/ – @david_academy – https://facebook.com/DavidAcademy

Hinweis der Redaktion

  1. Текущото време можем да вземем с (new Date).toLocaleTimeString()
  2. Числата на Фибоначи са онези числа, за които F(n) = F(n-1) + F(n-2), F(1) = 1, F(0) = 0
  3. Използването на декларация на функция дава възможност за деклариране на конструктор, но не дава възможност за деклариране на прототипни променливи Използването на декларация с асоциативен масив дава възможност за деклариране на прототипни променливи при декларацията, но не дава възможност за деклариране на конструктор.
  4. Вградените функции, които приемат контекста като параметър са: Function.prototype.apply(thisArg, argArray) Function.prototype.call(thisArg[, arg1[, arg2[, ...]]]) Function.prototype.bind(thisArg[, arg1[, arg2[, ...]]]) Array.prototype.every(callBackFn[, thisArg]) Array.prototype.some(callBackFn[, thisArg]) Array.prototype.forEach(callBackFn[, thisArg]) Array.prototype.map(callBackFn[, thisArg]) Array.prototype.filter(callBackFn[, thisArg])
  5. Въпреки че спецификацията изисква className да е дефиниран за Element, Gecko-базираните браузери имплементират това свойство само за интерфейса HTMLElement
  6. Можем да споменем още ondblclick, onkeydown и onkeyup, както и onmousedown и onmouseup. За целита на drag ‘n drop, се използват ondrag, ondragend, ondragenter, ondragexit, ondragleave, ondragover, ondragstart, ondrop.
  7. Може да се използва следната функция: function pulse(obj, duration, easing, fromProperties, toProperties, isStoppedFunc) { obj.animate(toProperties, duration, easing, function() { if (!isStoppedFunc || !isStoppedFunc()) { pulse(obj, duration, easing, toProperties, fromProperties, isStoppedFunc); } }); }