我不是在问什么是合适的链接语法,我知道它可能是这样的:
$('myDiv').removeClass('off').addClass('on');
但是,我真的很想了解它的内部工作原理,据我所知,链接是与其他著名框架相比的优势之一,但这对于像我这样的新手程序员来说是非常抽象的,我相信有人可以那里可以为我提供一个解释,让我了解链接是如何工作的。
谢谢!
我不是在问什么是合适的链接语法,我知道它可能是这样的:
$('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();
演示: http : //jsfiddle.net/5kkCh/
它所做的只是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
.
基本上,第一个函数调用$('myDiv')
返回一个 jQuery 对象,然后每个后续调用返回相同的对象。
松散地,
var $ = function(selector) {
return new jQuery(selector);
};
jQuery.prototype.removeClass = function(className) {
// magic
return 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
,您可以立即一次性调用第二个函数。