1

オブジェクト指向Javascriptについてもっと理解するための私の進行中の物語の中で、次のAPIに応答するクラスの作成についての質問に出くわしました。

var foo = new bar().delay(750).start().then(onComplete);

var bar = function() {
    this.delay(function(per) {
      //...
    };
}

私より経験豊富な人に、これに対応するクラスの作り方を教えてください。私はこのような連鎖を見たことがなく、オンラインで情報を見つけることができません:(

4

2 に答える 2

4

この連鎖はthis、関数を返すことによって実現されます。

this.delay = function(per) {
  //...
  return this;
};

最初の行のコードに固執したい場合は、コンストラクターにbarという名前を付ける必要があります。

var bar = function() {
    this.delay = function(per) {
      //...
      return this;
    };
    this.start = function() {
      ...
      return this;
    };
}

デモを見る(コンソールを開く)

于 2013-01-16T09:18:28.107 に答える
1

thisメソッドチェーンの秘訣は、チェーンできるようにしたい各メソッドから戻ることです。これにより、次のメソッドをthis.method()自動的に実行できます。バーオブジェクトの定義は、次のようになります。

function bar() {
    // bar initialization code here
}

bar.prototype = {
    delay: function(amt) {
        // delay code here
        return(this);
    },
    start: function() {
        // start code here
        return(this);
    },
    then: function(fn) {
        // then code here
        fn();
        return(this);
    }
};


var foo = new bar().delay(750).start().then(onComplete);

あなたの例では、が実行され、新しいオブジェクトnew bar()へのポインタを返します。barその新しいオブジェクトポインタを使用して、.delay(750)そのオブジェクトでメソッドが呼び出されます。次に、そのメソッドはオブジェクトも返すため、同じオブジェクトである.start()戻り値でメソッドが呼び出されます。.delay(750)

于 2013-01-16T09:22:48.817 に答える