Я почувався дуже розгубленим з приводу ключового слова "this" у jquery 1.7.3 source.some фрагменти, показані нижче:
jQuery.fn = jQuery.prototype = {
constructor: jQuery,
init: function( selector, context, rootjQuery ) {
var match, elem, ret, doc;
// Handle $(""), $(null), or $(undefined)
if ( !selector ) {
return this;
}
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
if ( !selector ) {
return this; //why not only one "return" here?
//And does "this" refer to jQuery object?
//OTOH, this question is about why it returns "this".
}
Відповіді:
2 для відповіді № 1повернути це дозволене для виклику модуля,
$(whatever).plugin1().plugin2() etc
якщо ви цього не робите return this
у плагіні ви не зможете встановити його ланцюжок & ланцюжок швидкий, а ланцюжок - це круто ви хочете якомога більше ланцюжка в коді jquery
відповісти на ваш коментар: ні, ви робите (всередині визначення плагіна):
if ($("#div1").get(0)) {
//do whatever to $("#div1")
}
return this;
return this
приходить в кінці визначення плагіна не потрібно повертати його за будь-яких умов
1 для відповіді № 2
так, це є об'єктом jquery і return це зробити вашу функцію придатною для використання.
// chaining
$("#person").slideDown("slow")
.addClass("grouped")
.css("margin-left", "11px");
// no chaining
$("#person").slideDown("slow");
$("#person").addClass("grouped");
$("#person").css("margin-left", "11px");
Розумієте, метод ланцюжка допомагає нам писати код швидше та красивіше.
Якщо ви хочете дослідити далі: http://en.wikipedia.org/wiki/Method_chaining