2009-09-23 3 views
37

Я понимаю использование знака (одного) доллара в популярных библиотеках JavaScript, таких как jQuery и Prototype. Я также понимаю значение знака двойного доллара в PHP (переменные переменные). Дин Эдвардс использует знак двойного доллара в своей знаменитой функции JavaScript addEvent(). Вот за исключением содержащего использования двойного знака доллара:JavaScript Double Dollar Sign

function addEvent(element, type, handler) { 
    // assign each event handler a unique ID 
    if (!handler.$$guid) handler.$$guid = addEvent.guid++; 
    // create a hash table of event types for the element 
    if (!element.events) element.events = {}; 
    // create a hash table of event handlers for each element/event pair 
    var handlers = element.events[type]; 
    if (!handlers) { 
    handlers = element.events[type] = {}; 
    // store the existing event handler (if there is one) 
    if (element["on" + type]) { 
     handlers[0] = element["on" + type]; 
    } 
    } 
    // store the event handler in the hash table 
    handlers[handler.$$guid] = handler; 
    // assign a global event handler to do all the work 
    element["on" + type] = handleEvent; 
}; 
// a counter used to create unique IDs 
addEvent.guid = 1; 

Из того, что я прочитал, знак доллара только официально имеет значение в JavaScript для инструментов генерации коды, хотя этот стандарт в значительной степени игнорируется сегодня из-за доллар подписывает широкое использование в вышеупомянутых библиотеках JavaScript.

Может ли кто-нибудь пролить свет на это использование знака двойного доллара в JavaScript?

Большое спасибо!

+1

Мне кажется, что это 'addEvent' будет течь, как решето в IE. – kangax

ответ

74

Я написал эту функцию. :)

Больше не имеет особого значения для префиксов $$. Это была нотация, которую я использовал, когда пакер был популярен. Пакер сократил имена переменных с помощью этого префикса. В настоящее время Packer автоматически сокращает имена переменных, поэтому это обозначение является избыточным.

Короткий ответ, знак $ является допустимым идентификатором в JavaScript, поэтому вы просто смотрите на кучу уродливых имен переменных.;)

+8

Спасибо за авторитетный ответ ... приятно слышать это из уст лошади, так сказать! – NewToThis

3

Насколько я знаю, знак доллара является обычным символом, который может использоваться в именах переменных. Это может быть конвенция, означающая свойство, с которым не следует смешивать.

Я предполагаю, что автор использовал $$guid, чтобы избежать столкновения с существующими именами свойств. Вероятно, он мог бы использовать __guid или что-то подобное.

20

Ну, действительно, это просто соглашение об именах разработчика. «$$» может быть «aa», для всех целей.

Как вы упомянули, единственная функция знака доллара $() стала почти стандартной в различных библиотеках JavaScript. «Одна функция, чтобы править ими всеми», а? Но помните, что это ничего не присуще самому JS. Это просто имя функции, которое заменило document.getElementById().

Итак, с учетом сказанного, $$ может быть любым. Черт возьми, вы можете даже иметь такую ​​функцию:

function $$$$$$$$(){ 
    //i've got dollar signs in my eyes! 
} 

Другими словами, это просто переменная/имя функции-так же, как все остальные.

+0

Отличные .. для подтверждения того, что было не больше этого! – NewToThis

6

Как и другие, $$ является произвольным идентификатором.

Инструментарий JavaScript MochiKit резервирует функцию, идентифицированную тем же самым, как select elements using CSS selector syntax, как и jQuery, за исключением того, что она не обертывает все соответствующие элементы в специальном объекте.

Итак, да, это ничего особенного, само по себе.

+6

Хотелось бы узнать, почему * & @ # $ !! люди меня голодают; если вы собираетесь проголосовать, по крайней мере, достаточно хороши, чтобы упомянуть ПОЧЕМУ. –

1

Двойной знак доллара упоминается в следующих условиях -

//getElementById  
    function $$(id){ 
    return document.getElementById(id); 
    } 
+0

Хороший улов. Это то, что я искал ... где это определено? Есть ли ссылка где-то, что-то вроде Mozilla Developer Network? – zipzit

Смежные вопросы