Структура класса типа jQuery

#javascript #jquery #class

#javascript #jquery #класс

Вопрос:

Итак, мне было интересно, может ли кто-нибудь помочь мне понять, как работает «класс» jQuery. Из того, что я могу сказать, он работает как статический класс, подобный такому:

 if(!$) { var $ = new function(){} }
  

Я думаю..

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

 $("a").removeClass("test");
$.get('myhtmlpage.html', myCallBack);
  

Я предполагаю, что передача этого аргумента просто возвращает document.getElementById(argument);

Но как? Как этот аргумент передается в класс после такого факта? кроме того, это какой-то результат цепочки методов?

Любая информация, которая поможет мне понять, что происходит, была бы отличной! Спасибо.

Ответ №1:

Здесь я работаю с исходным кодом jQuery, так что вы тоже можете посмотреть на него.

$ Функция явно не определена, а вместо этого связана с jQuery объектом:

 window.$ = jQuery;
  

jQuery Объект определяется следующим образом:

 jQuery.fn = jQuery.prototype = {
    constructor: jQuery,
    init: function( selector, context, rootjQuery ) {
  

init: function( selector Часть обрабатывает $('foo') обращения.

Если параметры не заданы, используется другая функция:

 get: function( num ) {
  

Комментарии:

1. Спасибо за это! Дополнительная информация была бы очень признательна!

Ответ №2:

Переменные в JavaScript могут содержать $. например, foo и $foo — это разные переменные. Естественно, $ является допустимым объектом.

Следующее, что стоит отметить, это то, что в JavaScript все является классом. Функция тоже является классом, поэтому у вашей функции тоже могут быть методы.

$ < — это функция с методами.

$(‘a’) <- это выполняет ту функцию, которая что-то делает, и снова возвращает $ .

$.get() <- это вызывает метод этой функции jQuery.

$(‘a’).get() <- это выполняет функцию с аргументом a, которая снова возвращает $, затем вы берете ее метод и выполняете его снова.

Когда вызывается $(‘a’), возвращается не тот же самый $, он будет содержать некоторую дополнительную информацию об используемом вами селекторе.

Мое последнее замечание заключается в том, что когда вы вызываете $(x); где x — функция, она используется как ярлык для регистрации обратного вызова, готового к использованию в документе.