2

你肯定看过 jquery。你知道 jquery 允许你像这样链接方法吗:

$('.elements').css({color:'red'}).etc().etc()...

但是,如果您注意到,该函数会返回一个对象数组(?):

$(document).ready(function(){
  var $elements = $('.c').css({color:'red'});
  console.log($elements);
});

示例,查看控制台查看结果

$功能也可以:

$(document).ready(function(){
  var $elements = $('.c');
  console.log($elements);
});

示例,查看控制台查看结果

两者都返回一个数组,然后可以继续链接。这怎么可能?当它不只是返回this(或对象本身)时,为什么可以继续链接?

我读了这篇文章,他可以成功地添加加号,但那是一个现有的字符串,因为他是字符串对象的原型。

有什么办法可以存档吗?

更新

我知道它返回一个 jquery 对象,但我如何返回包含值数组的对象并保持与返回值的链接。

更新 2

我要归档的内容

我有这个类,我想要一个方法来返回我的对象​​数组,只要链接它结束

var elements = Enumerable(anArray).Where(function(elements){ return elements != 1 })

这里chainig已经结束,所以它必须返回满足条件的元素,但我想保留chaingin,我只需要这样做:

elements  = elements.Where(function(elements){ return elements == 1}).Take(3);

并保持尽可能长的链接。

4

2 回答 2

1

$不返回数组,它返回一个jQuery object,它是一个类似数组的对象。即它的一些属性有数字名称并且它有一个length属性。

例子:

var obj = {
    0: element1,
    1: element2,
    find: function() {
        // some logic
        return this; // return a reference to itself for chaining
    },
    length: 2
};

现在,jQuery 方法不返回this,它返回一个新的 jQuery 对象,该对象公开相同的接口(显然),因此允许链接。

如果你想自己实现链接,你必须做同样的事情:要么返回this你的对象的一个​​新实例,要么用当前对象拥有的数据初始化它。

例子:

function Constr(data) {
    this.data = data || {};
}

Contr.prototype.chain = function() {
    // do stuff
    console.log(this.data);
    return new Constr(this.data);
    // or return this;
};

var obj = new Constr({foo: 'bar'});
obj.chain().chain().chain();
于 2013-08-20T12:59:22.283 回答
0

jquery 对象实际上是 html 对象的集合,因此当函数返回 jquery 对象时,它实际上返回了多个元素。

var ChainableObject = {
    data: [],
    where: function(fn){
       //doStuff with this.data
       return this;
    },
    take: function(n){
       //doStuff with this.data
       return this;
    },
    // and so on
    //.........
}
于 2013-08-20T13:00:13.203 回答