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 })

ここでチェーンが終わったので、条件を満たす要素を返す必要がありますが、チェーンを維持したいので、これを行うだけです:

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

そして、私が望む限り連鎖し続けてください。

4

2 に答える 2

1

$は配列を返さず、配列のようなオブジェクトであるjQuery オブジェクトを返します。つまり、そのプロパティの一部には数値名があり、プロパティがあります。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 に答える