jquery - 我无法理解 jQuery 链接是如何工作的

标签 jquery javascript javascript-framework unobtrusive-javascript

<分区>

我无法理解 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 没有 barb 没有 foo,我们永远不能调用相同的方法两次。


但是,如果我们只有一个对象,它有两种方法,并且两种方法总是返回同一个原始对象,那会怎样呢?

var fb = {
    foo: function() {
             console.log("foo");
             return fb;
         },
    bar: function() {
             console.log("bar");
             return fb;
         }
};

现在我们总是返回一个同时具有 foobar 方法的对象,因此我们可以调用任一方法。

fb.foo().bar().bar().bar().foo().foo().bar();

所以现在唯一真正的区别是我们返回的是 fb 而不是 this,但这并不重要,因为它们是同一个对象。上面的代码可以执行 return this; 并且它的行为相同。

如果您想创建对象的多个实例,这很重要,但这是面向对象技术的问题,而不是方法链

关于jquery - 我无法理解 jQuery 链接是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12585528/

相关文章:

jquery - 单击 anchor 时增加计数

JavaScript - 获取列表选项的长度

javascript - 如何在不刷新页面的情况下获取laravel数据?

javascript - jQuery 不影响脚本但在控制台?

jquery - 禁用在 Safari 中悬停时显示全文

jquery - Lobibox:关闭之前的通知

javascript - 如何使 svg 路径一个接一个地淡入/淡出?

javascript - Wso2 JAGGERY 出版商

javascript - 如何覆盖 javascript 中的 navigator.plugins 或如何将其设置为 null?

design-patterns - 主干 : Multiple views subscribing to a single collection's event? 这是一种不好的做法吗?