【问题标题】:How to make chaining method but returning more than 3 value at the same time如何制作链接方法但同时返回超过3个值
【发布时间】:2013-08-22 12:56:07
【问题描述】:

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

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

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

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

(Example, see console to see the result)

$ 函数也可以:

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

(Example, see console to see the result)

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

我读了this post,他可以成功地添加加号,但那是对现有字符串的,因为他是字符串对象的原型。

有什么办法可以存档吗?

更新

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

更新 2

我要归档的内容

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

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

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

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

并根据我的需要继续链接。

【问题讨论】:

  • 我不太确定你的目标是什么,或者你到底要问什么。此外,它们并没有真正返回一个数组,而是返回一个 jquery 对象,其中包含一个数组。
  • 我在看什么,如何返回我的对象​​数组以及值是什么并继续链接。我只知道通过返回这个来实现它,而不是一个数组
  • 为什么?您可以轻松地从 jquery 对象中过滤元素,甚至可以提取特定元素......并循环遍历每个获取值。我认为您需要展示您的最终目标,我们才能进一步帮助您。
  • @smerny 请看我的更新 2
  • 也许我仍然对您要做什么感到困惑,但似乎可以通过 filter() 和 slice() 的组合来完成? jsfiddle.net/5Nv4X/2

标签: javascript jquery chaining


【解决方案1】:

$ 不返回一个数组,它返回一个jQuery object,它是一个类数组 对象。 IE。它的一些属性有数字名称,并且它有一个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();

【讨论】:

  • 是的,我作为示例提供的示例也适合此用例。再说一遍:要么返回this,要么返回你的“类”的新实例。
【解决方案2】:

一个 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
    //.........
}

【讨论】:

  • 天哪,你救了我!!!!这就是答案!!我会接受你的回答,但我没有足够的声誉:(
猜你喜欢
  • 1970-01-01
  • 2011-12-13
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多