пятница, октября 19, 2007

Жабаскрипт

Давно собиралась написать заметку об особенностях программирования на JavaScript. Наверное, это не единственная в своем роде попытка передать опыт другим. Хочу подчеркнуть, что далее я излагаю мысли, основываясь на собственном опыте программирования, и могут возникнуть неточности и недоразумения.

0. Допустим, надо создать класс EarthMap (Форосу привет):


function EarthMap() {
...
}

Тогда для того, чтобы вызвать метод экземпляра класса, нужно написать что-то вроде этого:

this.activate();

Но довольно часто возникает ситуация, когда this - это не экземпляр класса, а объект DOM, например ссылка или картинка, на которую кликнули.
Из этой двойственной ситуации поможет выйти вспомогательный объект:

thisClass = this;

И тогда в дальнейшем метод вызывать, как

thisClass.activate();


1. У JavaScript атрофированные возможности работы с массивами. Нет поиска по массиву, нет добавления элемента на нужную позицию, то же самое с удалением. Поэтому используются объекты. Но и там нас ждет разочарование.
Создаем объект:

var groups = {
32: "Алмата",
40: "Белгород",
...
39: "Черновцы"
}

Где-нибудь дальше в скрипте мы этот объект изменяем: удаляем, добавляем значения. И где-нибудь нужно узнать, пуст ли он или сколько в нем значений. Чтобы узнать это, придется написать функцию:

// пустой ли объект
this.isEmptyObject = function(obj)
{
var empty = true;
for (i in obj)
{
empty = false;
break;
}
return empty;
}

Если вы дочитали до этого места, то вам не составит труда написать самостоятельно функцию подсчета значений в объекте.
А также разделите мое негодование по поводу работы с массивами.

5 комментариев:

g15rus комментирует...

как-то сумбурно все... поймет только тот кто в теме... например я =)

Анонимный комментирует...

А что на счет если на событие навешивается только один из экземпляров объекта? Или неизвестное число экземпляров надо привязать к неопределенному числу евентов?

А что на счет добавлять/удалять элементы в объект типа MyArray (которы предварительно написать). Тогда он всегда будет знать сколько в нем элементов, сортировать сможет итд, форич итд...

--
Denvr

Allinne комментирует...

to Denvr:
0. такие ситуации не могут возникнуть.

1. ну то есть написать/взять готовую библиотеку, позволящую нормально работать с массивами.

А что насчет расширить функционал языка?

Анонимный комментирует...

0. Яваскриптовые фреймворки (MooTools например), как правило, дают нативный класс Class. Соответственно, когда нужно создать класс, вы пишете

var MyClass = new Class({
initialize: function(params) {
// действия, производимые при создании экземпляра объекта
}
});

var test = new MyClass(params);

1. Опять же, фреймворки. В том же обожаемом мною MooTools класс Array обвешан методами для решения абсолютного большинства встающих задач, включая описанные здесь.

Футпринт фреймворка, от которого отцеплено все ненужное для конкретного проекта, после упаковки -- 12-15 Кб. А облегчение жизни разработчику -- фантастическое.

Allinne комментирует...

to Melnikoff:
Да, фреймворки хороши. Но для простых задач (фотогалерея, календарь) предпочитаю использовать стандартные средства. А для разработки сложного интерфейса мне симпатичен jQuery.