2011-01-10 3 views
3

Я понимаю, что вы вызываете метод, подобный этому, когда вы расширяете $.fn.

($ == jQuery)

//$("div").myMethod(); 

$.fn.extend({ 
    myMethod: function(){...} 
}); 

И как это, когда вы расширяете JQuery объект:

//$.myMethod2(); 

$.extend({ 
    myMethod2: function(){...} 
}); 

Но я не совсем понимаю, что $() делает здесь:

// Здесь вызывается несколько методов. Некоторые с тем же именем метода (инициировать), что плохо.

// Но, может быть, поэтому пустой объект JQuery необходим так имена методов не конфликтуют

$(function() { 

    $().functionName({ 
     something: 'something' 
    }).myMethod(); 

    $().func1({ 
     x: 1 
    }).initiate(); 

    $().func2({ 
     y: 2 
    }).initiate(); 

}); 

ли это делать с тем, метод вызывается в том числе имя функции?

Заранее благодарим и надеемся, что это имеет смысл.

ответ

3

$() создает пустой объект jQuery (набор оберток). Я бы не знал, почему кто-то сделает что-то подобное. В принципе, вы вызываете functionName и myMethod на пустой набор элементов = ничего не должно произойти.

jQuery().css({ 
    'foo': 'bar' 
}).show(); 
+0

Я не знаю, почему кто-то будет делать это тоже, но учитывая, что это вопрос о пользовательских функциях, мы не можем знать, что ничего случится. '$ .fn.extend ({test: function() {alert (« это произойдет »);}}); $(). test(); ' –

+0

@David: вы правы. Конечно, код из этих методов будет выполняться. Но не было бы причин иметь такие методы в пространстве имен jQuery '.fn', поскольку они не могут воздействовать на обернутые элементы. – jAndy

+0

Я полностью согласен. OP, скорее всего, столкнулся с кодом, написанным кем-то, кто не знал, что они делают, но я был бы удивлен, если бы код не делал ничего. –

1

Перед JQuery 1.4 вызова jQuery() был бы такой же, как jQuery(document). С тех пор он был изменен, чтобы вместо этого вернуть пустой набор. Так как jQuery 1.4, jQuery() является эквивалентом jQuery([]). Тем не менее, последний был и является рекомендуемым способом получения пустого набора, чтобы не смутить никого.

В любом случае, я предполагаю, что код, о котором вы просите, является старым, и использует устаревший способ доступа к узлу document, не говоря уже о том, что это была плохая практика, чтобы сделать это даже тогда. $(), вероятно, должно быть $ или $(document).

Но это не означает, что пустой набор jQuery является неправильным или бесполезным. Адам Кисс написал post on his blog о полезности пустых множеств.

И, наконец, некоторые другие способы расширения JQuery:

(function($){ 
    $.myMethod = function() { 
    }; 

    $.fn.myMethod = function() { 
    }; 
})(jQuery); 
+0

Хорошо, что имеет смысл. Большое спасибо за ваши ответы. Я думаю, что «старый изворотливый код» хорош в некотором смысле, поскольку он заставляет вас копать немного глубже в том, как все работает :) – MBax