Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
http://www.rusdoc.ru. Версия для печати.

Использование функции $()

Раздел: Programming / JavaScript @ 17.11.2007 | Ключевые слова: функции JavaScript

Автор: Блог Photus
Источник: Realcoding.NET

Пост разумеется не о деньгах, а о функции $() - заменяющей и немного добавляющей функциональности стандартной document.getElementById. Она используется и в бибилиотеке prototype как ключевая(правда там в ней еще больше функциональности добавили) и ее же советуют профессионалы, как например здесь: http://www.rusdoc.ru/go.php?http://www.realcoding.net/articles_html/javascript_best_user_functions.html приведен неплохой код:

function $() {
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++) {
        var element = arguments[i];
        if (typeof element == `string`)
            element = document.getElementById(element);
        if (arguments.length == 1)
            return element;
        elements.push(element);
    }
    return elements;
}
    
// Sample Usage:
var obj1 = document.getElementById(`element1`);
var obj2 = document.getElementById(`element2`);
function alertElements() {
  var i;
  var elements = $(`a`,`b`,`c`,obj1,obj2,`d`,`e`);
  for ( i=0;i < elements.length;i++ ) {
    alert(elements[i].id);
  }
}



В итоге вместо громоздких document.getElementById(`id1`) можно использовать короткую запись - $(`id1`) - ну почти переменная в php :) . Буквально 15 минут назад я внес в главный яваскриптовый файл проекта эту функцию, поправил один небольшой(200 строчек) яваскрипт-модуль заменив везде document.getElementById на $ и взглянул на код. Разумеется, он стал более наглядным и красивым. Многие длинные строчки существенно сократились.
Однако, перед тем как рассказывать всем в команде(среди которой есть и совсем неопытные студенты), я немного задумался. Слишком уж запись $(`id1`) похожа на запись простой переменной - особенно если учесть что мы пишем и на php. :) Это может привести к страшной деоптимизации кода.
Видя document.getElementById - даже неопытные программисты осознают, что это функция и она реально чтото вычисляет, чтобы потом выдать элемент. А видя $(`id1`) такого осознания нет и это может привести, например к постоянному ее вызову в цикле, что-нибудь в этом роде :

for(var i=0;i<10000;i++)
{
    if($(`id1`).value==i)
    {
        ...
    }
}

.............

for(var i=0;i<10000;i++)
{
    if(document.getElementById(`id1`).value==i)
    {
        ...
    }
}



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



Вернуться в раздел: Programming / JavaScript
© Copyright 1998-2012 Александр Томов. All rights reserved.