/ / Просте про джерело jquery, заплутане щодо ключового слова “this” - javascript, jquery, this

Просте про джерело jquery, заплутане про "це" ключове слово - javascript, jquery, this

Я почувався дуже розгубленим з приводу ключового слова "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