2011-08-08 10 views

答えて

1

機能から適切なものを返すだけです。基本的な経験則は、何も返さずに何も返さず、代わりにthisを返すような方法です。

function Constructor(){}; 

Constructor.prototype = { 
    foo: function(){ 
     console.log('foo'); 
     return this; 
    }, 
    bar: function(x){ 
     console.log('bar', x); 
     return this; 
    } 
} 

var obj = new Constructor(); 
obj.foo().bar(17).bar(42).foo(); 
+0

これは私が望んでいたまさにです。ありがとう!! – 0x499602D2

5

あなたが記述している技術がfluent interfaceと呼ばれ、それはすべてのチェーン可能関数からオブジェクトの同じ種類を返す必要とします。そのオブジェクトのプロトタイプには関数定義が含まれています。

リンクされた記事には、javascriptを含むさまざまな言語のサンプルコードが含まれています。

1

この特定の状況では、各メソッドはthisを返します。だから、:

// ... this has to be the most impractical class I've ever written, but it is a 
// great illustration of the point. 
var returner = new function() { 
    this.returnThis = function(){ 
     console.log("returning"); 
     return this 
    } 
} 
var ret2 = returner.returnThis().returnThis(). 
      returnThis().returnThis() // logs "returning" four times. 

console.log(ret2 == returner) // true 
1

チェーン例:

var avatar = function() { 

    this.turnLeft = function { 
     // some logic here 
     return this; 
    } 

    this.turnRight = function { 
     // some logic here 
     return this; 
    } 

    this.pickUpItem = function { 
     // some logic here 
     return this; 
    } 

}; 


var frodo = new avatar(); 
frodo.turnLeft().turnRight().pickUpItem(); 
関連する問題