JavaScript-краткий экскурс

28 Ноя
2011

В последнее время часто сталкиваюсь с вопросами людей, начавших работать с JavaScript, по поводу объявления классов, наследования, статических методов.
В данной статье хотелось бы кратко осветить несколько ключевых моментов, после чего использование языка становится гораздо проще.

1. Объявление переменных.
Ключевым моментом при объявлении переменных является область видимости.
Допустим, мы объявляем глобальную переменную.
var asd = 5
Что происходит?
У window добавляется проперти asd и устанавливается равным 5.

Пример.
alert(window.asd) //undefined
var asd = 5
alert(window.asd) //5


При объявлении переменной важно учитывать область видимости, так как переменная по сути дела – это добавление проперти в объект для текущей области видимости.

2. Описание класса
Для того, чтобы объявить класс, достаточно объявить фугкцию. Для того, чтобы создать объект данного класса, надо использовать ключевое слово new.
Пример.
var Class1 = function() {}
Для того, чтобы в класс добавить проперти надо написать

var Class1 = function () {
    this.p = 'newProperty';
}
var o1 = new Class1();


Словом this мы говорим, что в ДАННЫЙ ОБЪЕКТ будет добавлено новое свойство p
(если посмотреть объект o1 в QuickWatch, то мы увидим, что у него там есть созданное нами проперти p)

Если же написать просто
var Class2 = function()
{
p:'newProperty'
}
var o2 = new Class2();
alert(o2.p) 


o2.p — получим undefined, так как в данном случае переменная p доступна лишь в конструкторе, не является свойством объекта.

Алсо,
alert(Class1.p) // undefined
alert(Class2.p) //undefined

3. Prototype
prototype – это специальное свойство, содержащееся у любого объекта JavaScript.
С помощью его реализуется как наследование, так и интерпретация статических методов.
Пример.
var Class1 = function () {}
Class1.prototype.newProp = ‘2’;

var o1 = new Class1();
alert(o1.newProp) //2

На этом построено и наследование(в прототипе наследника указываем родителя)
var Class1 = function () {}
Class1.prototype.newProp = '2';
var o1 = new Class1();


var Class2 = function () { }
Class2.prototype = new Class1();
var o2 = new Class2();
alert(o2.newProp); //2

Перегрузка override посредством доступа к объекту — в конструкторе через this.
var Class3 = function (par) { this.newProp = par; }
Class3.prototype = new Class1();
var o3 = new Class3('333');
alert(o3.newProp); //333
alert(Class3.prototype.newProp) //2

Ну а статика в том, что то, что лежит в прототайп, одинаково для всех создаваемых объектов(если не перегружено).
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх