некоторые вкусности JavaScript
Начиная пользоваться Javascript, каждый разработчик учиться делать alert() и setTimeout(), а что делает с Javascript “продвинутый” разработчик? Постараемся рассмотреть аспекты, которые позволяют делать код гибче и удобочитаемее…
Немножко от ООП .
Javascript очень интересный язык. У него нет строгой типизации и все элементы представляют из себя объекты. Больше того — каждая объявленная переменная без var, является свойством наивысшего в иерархии объекта JS — объекта window.
[js]
variable = 10;
alert(window.valiable); //alerts “10″
[/js]
Объекты объектами, но сама объектная сущность языка существенно пострадала из-за отсутствия уровней доступа (public, protected, private) а так же наследования и иже с ним. Но мы можем не только эмулировать необходимые уровни доступа, но и даже создавать паттерны разработки, ничем не уступающие языковым конструкциям в полноценных языках! Так создадим наиболее востребованный в условиях Javascript паттерн “Singleton” (одиночка). Применение данного паттерна позволяет использовать однажды созданный объект со всеми инициализированными свойствами, не переопределяя раз за разом конфигурационные директивы (к примеру). Как будет выглядеть singleton в JS?
[js]
var singleton = function () {
var property; //так выглядит private свойство
function method() { } //…а так — private метод
return {
‘value’ : ‘public_val’, //а вот это уже public свойство
‘init’ : function () { //…и public метод
alert(this.value); //покажем доступ к public свойству
alert(property); //вызовем значение private переменной
method(); //обращение к приватному методу
}
}
}(); //использовав скобки, мы выполнили эту функцию и вернули ее значение в объект singleton’а
singleton.init(); //так обращаемся к public методам “класса”
alert(singleton.value); //выводит значение public переменной
/* а эти два вызова завершатся ошибкой */
singleton.method();
alert(singleton.property);
[/js]
Увеличиваем читабельность кода
Многие библиотеки на Javascript созданы в том числе и для уменьшения кода, который приходится писать и дублировать в своих приложениях для браузера. Так, например, метод $() из библиотеки prototype или mootools очень упростил жизнь не одному разработчику, а код сделал стройнее и понятнее. Но даже фреймворки такого размаха и типа могут привести к тому, что код будет выглядеть подобным образом (абстрактный пример):
[js]
someobj.somemeth().prop.method().array[1].value;
someobj.somemeth().prop.method2().value4;
someobj.somemeth().prop.meth().array7[4];
[/js]
Очевидно бессмысленное повторение однообразного кода для доступа к свойствам и методам “на глубине”. порой такие конструкции могут доходить до неимоверных размеров и читабельность кода, в итоге, начинает стремиться к нулю… Но программисты интерпретатора Javascript подумали о разработчиках и ввели оператор with(), который в данном случае спасет наш код. Пример покажет лучше:
[js]
with (someobj.somemeth().prop) {
method().array[1].value;
method2().value4;
meth().array7[4];
}
[/js]
Чего мы добились? Код стал значительно читабельнее, а интерпретатору нет необходимости высчитывать путь обращения каждый раз — он начинает использовать внутренний кеш.
На сейчас, пожалуй, достаточно, а в следующий раз постараюсь затронуть некоторые другие аспекты “углубленной” разработки на языке Jasavscript ![]()
Tags: Javascript, singleton, ООП, разработка, упрощение
Также рекомендую к прочтению:
Февраль 1st, 2008 at 01:44
А вот PLAIN TEXT мне понравился!
Февраль 1st, 2008 at 10:08
кому шо, а ему ПлейнТекст понравился :)))
Февраль 4th, 2008 at 03:58
Насчёт with. Очень многие разработчики, включая создателей языка, не рекомендуют его использовать.
Февраль 4th, 2008 at 08:40
ссылку на источник сведений, плз
Февраль 5th, 2008 at 05:01
Here you go!
http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/
По рекомендации ( http://javascript.crockford.com/ ) Дугласа Крокфорда
Февраль 5th, 2008 at 08:55
собсно не рекоммендует только по причине, что ему не понятно какая из переменных будет изменена - та что свойство with() объекта или глобальная переменная вне with().
Достаточно руководствоваться правилом что всегда сначала проверяются более глубокие свойства и потом идет движение по дереву объекта вверх. соответственно, если свойство найдено не будет - будет попытка изменить глобальную переменную, а если не будет и ее - создать новую (кстати являющуюся свойством window)
там же в блоге указан адекватный способ - кешировать результат доступа к свойству в новую переменную. Мне такой подход не импонирует - не люблю ненужные переменные
Февраль 5th, 2008 at 14:34
Ты дядю, Крокфорда слушай, он плохого не посоветует.