我无法理解 jQuery 链接的工作原理。
jQuery("div").attr("id", "_id")
.hide()
.show();
我做了一些类似链接的事情,但我不确定它是否与 jQuery 使用的逻辑相同。
var fun = (function (parma) {
return function () {
return {
start: function () {
console.log("start");
return this;
},
mid: function () {
console.log("mid");
return this;
},
last: function () {
console.log("last");
return this;
}
}
}
})();
// Working
fun().start()
.mid()
.last();
如果一个函数的返回值是一个有方法的对象,你可以立即调用那个方法。就这么简单。
因为您要返回 this
,所以您返回的是与调用上一个方法的对象相同的对象。这意味着您将返回一个具有所有相同方法的对象。
这样想:
var f = {
foo: function() {
console.log("foo");
return b;
}
};
var b = {
bar: function() {
console.log("bar");
return f;
}
};
这里我们有两个对象。
f
对象有一个名为 foo
的方法,它返回 b
对象。
b
对象有一个名为 bar
的方法,它返回 f
对象。
因此,在调用foo
之后,我们可以调用bar
,反之亦然。
f.foo().bar().foo().bar(); // etc
但是因为 f
没有 bar
而 b
没有 foo
,我们永远不能调用相同的方法两次。
但是,如果我们只有一个对象,它有两种方法,并且两种方法总是返回同一个原始对象,那会怎样呢?
var fb = {
foo: function() {
console.log("foo");
return fb;
},
bar: function() {
console.log("bar");
return fb;
}
};
现在我们总是返回一个同时具有 foo
和 bar
方法的对象,因此我们可以调用任一方法。
fb.foo().bar().bar().bar().foo().foo().bar();
所以现在唯一真正的区别是我们返回的是 fb
而不是 this
,但这并不重要,因为它们是同一个对象。上面的代码可以执行 return this;
并且它的行为相同。
如果您想创建对象的多个实例,这很重要,但这是面向对象技术的问题,而不是方法链。