В данной статье я решил собрать все понятия о javascript, которые могут вызывать сложности:
Итак:
Javascript — объектный язык
В нем все является объектами. Строки, числа, функции и массивы — все это объекты со своими методами и свойствами.
name = "Stroka"
alert( name.toString() ); //Stroka
Javascript — прототипизированный язык
Т.е. наследование происходит путем копирования экземпляра объекта — прототипа. И если мы в прототип добавим новый метод, после инициализации дочернего класса. В дочернем классе метод будет доступен.
function Fruit(name) { }
var fruit = new Fruit(); //Создаем новый объект
function Apple(name) { }
Apple.prototype = fruit; //Создаем класс Apple наследуемый от прототипа fruit
big = new Apple();
//big.count(3); //TypeError: big.count is not a function -
//т.е. функция count недоступна
// Добавляем в всем объектам класса Fruit метод count
Fruit.prototype.count= function(n) {
alert(n);
}
big.count(3); //3 - т.е. метод count доступен и из объектов класса Apple
Слабая типизация, динимическая типизация
Переменные в javascript слабо типизированы — т.е. не нужно явно объявлять тип переменной. Уже браузер в зависимости от типа позволит или не позволит выполнять какие-либо операции. По мере выполнения программы тип переменной может меняться (динамическая типизация).
var res = "string1"; alert(res); // выводит «string1»
res = 1; alert(res); // выводит «1»
res += 2; alert(res); // выводит «3»
res += 'string2'; alert(res); // выводит «3string2»
Область видимости переменных
Переменные в Javascript бывают глобальными и локальными (с использование директивы var). Глобальная переменная доступна везде, локальная — только в текущей области видимости.
Технически, глобальные переменные — всего лишь свойства объекта window, поскольку весь код выполняется в его контексте.
<script>
alert(location); // сообщит window.location
</script>
В JavaScript область видимости переменных не ограничивается блоком {}, а ограничивается только функцией.
Это можно видеть на примере:
a = 'global'; //глобальная переменная
function go() {
var a = 'local'; //локальная переменная
}
go();
alert(a); // global - т.е. отобразится глобальная переменная
a = 'global';
for (var i=0;i<=1;i++) {
var a = 'local';
}
alert(a); // local - т.е. отобразится локальная переменная
Функции в JS
Функции js являются полноценными объектами класса Function. Поэтому возможны такие конструкции:
function myfunc() { ... }
myfunc.test = 6
alert(myfunc.test) // 6
В Js существует возможность объявлять анонимные функции. Т.е. функции, которые объявляются на месте использования и не имеют отдельного названия. До момента объявления они недоступны.
Пример:
function(x,y) {return x+y}
Замыкания
В js существует возможность внутри функции создавать внутренние функции, которые затем будут доступны во всем скрипте.
Т.е. замыкания — это внутренние функции. Наиболее часто их используют для обработки событий.
function addObrabotchil(sourceId) {
var na-chto-povesit = document.getElementById(sourceId)
var obrabotchik = function() {
alert('Клик обработан');
}
na-chto-povesit.onclick = obrabotchik
}
DOM
DOM (объектная модель документа) — объектное представление страницы документа написанной на html, xhtml, xml, которое позволяет работать со структурой (читать, изменять, удалять) документа.
Как отлаживать JS
- в Mozilla Firefox — firebug
- в Opera — Opera Dragonfly
- в Internet Explorer — Microsoft Script Debugger
Фреймворки, сборники классов JS
- jQuery
- Prototype
- Dojo
- Ext (фреймворк)
- Yahoo! UI Library
- MochiKit (англ.)
- MooTools
- Rico