は具体的に、どのように私は次のような、連鎖を許可するプロトタイプを書き込むことができます。メソッドを関数に追加するにはどうすればよいですか?
$('myDiv').html('Hello World').fadeIn('slow');
は具体的に、どのように私は次のような、連鎖を許可するプロトタイプを書き込むことができます。メソッドを関数に追加するにはどうすればよいですか?
$('myDiv').html('Hello World').fadeIn('slow');
機能から適切なものを返すだけです。基本的な経験則は、何も返さずに何も返さず、代わりに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();
あなたが記述している技術がfluent interfaceと呼ばれ、それはすべてのチェーン可能関数からオブジェクトの同じ種類を返す必要とします。そのオブジェクトのプロトタイプには関数定義が含まれています。
リンクされた記事には、javascriptを含むさまざまな言語のサンプルコードが含まれています。
この特定の状況では、各メソッドは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
チェーン例:
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();
これは私が望んでいたまさにです。ありがとう!! – 0x499602D2