2014-01-17 3 views
0

Я только что начал свой первый JavaScript-учебник пару дней назад. Я пришел к выводу, что они объясняют использование библиотек. Два вопроса ума до сих пор:Библиотека JavaScript: jQuery против прототипа

  1. getElementById реализуется как $("#id") в JQuery и, как $("id") в прототипе. Почему непоследовательность?

  2. Если обе библиотеки включены, как браузер может решить, какой объект должен быть возвращен для $("")?

+2

Вы, скорее всего, не будет использовать как JQuery и Prototype вместе, как они делают много одних и тех же вещей. – Jason

+0

@meagar Что делать, если мне нужно использовать оба кода? –

+2

http://api.jquery.com/jquery.noconflict/ – j08691

ответ

1

Браузер не «принимает решения», в зависимости от того, какой из них вы включаете, второй перезаписывает первый.

В ситуациях, когда две библиотеки борются за $, используйте jQuery вместо:

jQuery('#id') // same as $('#id') when $ == jQuery 

Вы можете вернуть контроль над $ к прототипу с jQuery.noConflict.

Что касается несогласованности, то они разные библиотеки, написанные в разное время разными людьми, без намерения сделать их совместимыми. Консистенция никогда не рассматривалась.

1

1. Почему непоследовательность?

Две библиотеки были реализованы в разное время, разными командами и делали совсем другие вещи. Почему вы ожидаете согласованности?

2. Если обе библиотеки включены, как браузер может решить, какой объект должен быть возвращен для $("")?

Это зависит от того, как именно вы их включаете. Однако у jQuery есть возможности избежать конфликтов, подобных этому, см. jQuery.noConflict. Прошло некоторое время с тех пор, как я использовал прототип, но он может иметь аналогичную функциональность.

+1

Прототип расширяет прототипы (отсюда и название) нескольких конструкций нижнего уровня в самом JavaScript. Это очень важно в философии Ruby с его открытыми классами, чтобы сделать язык так, как вам нужно, а не просто использовать его как есть. В результате, если другая библиотека ожидает обычного поведения и полагается на ее неровную интерпретацию (например, используя для каждого из них итерацию по массиву), вы получите непоследовательные результаты. jQuery может использовать использование прототипа символа $, используя noConflict(). Не все плагины jQuery написаны достаточно хорошо, чтобы справиться с остальными. – Walter

+1

Прототип: $ ('itemId') -> отдельный элемент или ложь. $$ ('. className tag any selector') -> массив совпадающих элементов или пустой массив. jQuery: $ ('# itemId') или $ ('whatever selector') -> объект, содержащий совпадения. – Walter

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