2013-02-27 4 views
2

Может ли кто-нибудь сказать мне какую-либо разницу между этими двумя видами функции расширения? Благодарю.jquery с ключевым словом или без него

$.fn.alertWhileClick= function() { 
    alert($(this).val()); 
} 


$.fn.extend({ 
    alertWhileClick:function(){ 
     alert($(this).val()); 
    } 
}); 
+0

http://api.jquery.com/jQuery.extend/ – edhedges

+1

Привет, edhedges, это один расширяет '$' или 'объект Jquery' метод. например '$ .alertWhileClick()', спасибо. –

+0

@ Джо, что заставляет вас думать, что есть разница между этими двумя формами? –

ответ

1

Эти две формы эквивалентны. Первый добавляет метод прототипа jQuery через назначение, второй делает это путем вызова $.fn.extend(), который является тем же методом, что и $.extend().

документация на самом деле немного вводит в заблуждение здесь, так как он говорит:

Если только один аргумент подается в $.extend(), это означает, что цель аргумент опущен. В этом случае сам объект jQuery имеет значение .

Но что на самом деле происходит нечто подобное:

Если только один аргумент подается в $.extend(), это означает, что цель аргумент опущен. В этом случае объект $.extend() применяется к (то есть к объекту, привязанному к this в пределах метода) - считается объектом.

Так, называя $.extend() с одним аргументом расширяет $, и вызов $.fn.extend() с одним аргументом расширяет $.fn.

соответствующие части исходного кода говорят:

jQuery.extend = jQuery.fn.extend = function() { 

    // [...] 

    // extend jQuery itself if only one argument is passed 
    if (length === i) { 
     target = this; // Note: 'this', not 'jQuery'. 
     --i; 
    } 

    // [...] 
}; 
+0

Ответ красив, как вы! –

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