我不要求什么是链接适当的语法,我知道这可能是这样的:jquery链接如何工作?
$('myDiv').removeClass('off').addClass('on');
但是我真的很好奇,了解它的内部工作,据我所知链是对于其他着名框架的优势之一,但我们对像我这样的新手程序员有很多抽象,我确定有人在那里可以给我一个解释,让我了解链接是如何工作的。
谢谢!
我不要求什么是链接适当的语法,我知道这可能是这样的:jquery链接如何工作?
$('myDiv').removeClass('off').addClass('on');
但是我真的很好奇,了解它的内部工作,据我所知链是对于其他着名框架的优势之一,但我们对像我这样的新手程序员有很多抽象,我确定有人在那里可以给我一个解释,让我了解链接是如何工作的。
谢谢!
如果你有一个具有某些方法的对象,如果每个方法都返回一个带有方法的对象,那么你可以简单地从返回的对象中调用一个方法。
var obj = { // every method returns obj---------v
first: function() { alert('first'); return obj; },
second: function() { alert('second'); return obj; },
third: function() { alert('third'); return obj; }
}
obj.first().second().third();
我喜欢这个例子,使它更简单..谢谢 – isJustMe
@ Rafael.IT:不客气。很高兴我能帮上忙。 :) – user113716
而不是'return obj',你能说'return this'吗?因为我测试过,它给了我相同的结果。 –
基本上第一个函数调用$('myDiv')
返回一个jQuery对象,然后每个后续调用返回相同的一个。
松散,
var $ = function(selector) {
return new jQuery(selector);
};
jQuery.prototype.removeClass = function(className) {
// magic
return this;
}
可能的重复我发现这解释了它如何工作比接受的答案更多。 – K3NN3TH
所有它做的是返回一个参考this
当方法完成。就拿这个简单的对象,例如:
var sampleObj = function()
{
};
sampleObj.prototype.Foo = function()
{
return this;
};
你可以链这些电话一整天,因为你返回参考this
:
var obj = new sampleObj();
obj.Foo().Foo().Foo().Foo() // and so on
jQuery的简单执行的操作,然后返回this
。
return $this;
每个jQuery函数返回jQuery的类,则其可以具有方法调用它的一个实例。你可以把它分解下来,而这段代码也会有相同的效果。
jQuery_obj = $('myDiv');
jQuery_obj = jQuery_obj.removeClass('off');
jQuery_obj = jQuery_obj.addClass('on');
问题是函数必须计算为“父”函数。所以例如
foo().bar().test();
必须评估到:
foo().test();
,使您可以拨打foo()
另一个函数。要做到这一点,你可以return this
:
function foo() {
// empty, nothing interesting here
}
foo.prototype.bar = function() {
return this;
}
foo.prototype.test = function() {
return this;
}
然后,
var something = new foo();
something.bar() === something; // true
的,因为这和:
something.bar().test() === something.test(); // true
是因为something.bar()
计算为something
,你可以立即调用第二个函数一气呵成。
在链接父函数/方法返回一个对象,然后由子函数/方法使用,并且事情继续这样。简而言之,jQuery
或$
返回自身(一个对象),它允许链接。
它低于
var obj=$('input'); //returns jQuery object
var obj1=obj.val('a'); //returns jQuery object
var obj2=obj1.fadeOut();//returns jQuery object
它看起来像这样,如果它与链接
$('input').val('a').fadeOut();
这里做了同样的机制是有条件的回调链的一个例子,就像是在$.ajax
jQuery的使用功能。
// conditional callback function example
myFunction = function() {
// define event callback prototypes without function parameter
var callback_f = new Object;
callback_f.callback1 = function() { return callback_f; };
callback_f.callback2 = function() { return callback_f; };
if ([condition]){
// redefine the callback with function parameter
// so it will run the user code passed in
callback_f.ReturnPlayer = function (f) { f(); return callback_f; };
}else{
callback_f.NewPlayer = function (f) { f(); return callback_f; };
}
return callback_f;
}
其中一种方法来链接,检查demo。
test("element").f1().f2().f3()
无下面的答案都是完整的,请在'.END()的文档':http://api.jquery.com/end/,如jQuery的不仅返回该对象的功能运行但如果选择器在中链中更改,它将保留所用选择器的历史记录,以便您可以“返回”到之前使用的选择器。 – VNO
以下是设计模式:http://en.wikipedia.org/wiki/Fluent_interface – Joe
@Vibhu:OP想知道链接如何工作,而不是jQuery实现的所有细节。 *“对于像我这样的新手程序员,我确信有人在那里可以给我一个解释,让我了解链接是如何工作的。”* – user113716