1. オブジェクト チェーン: メソッド本体はオブジェクト インスタンス自体を返します (this)
関数 ClassA(){
this.prop1 = null;
this.prop3 = null; .prototype = {
method1 : function(p1){
this.prop1 = p1;
これを返す;
},
method2 : function(p2){
this.prop2 = p2;
これを返す;
},
メソッド 3 : function(p3){
this.prop3 = p3;
これを返す;
関数/クラス ClassA が定義されています。 prop1、prop2、prop3 という 3 つの属性/フィールドがあり、3 つのメソッド method1、method2、method3 がそれぞれ prop1、prop2、prop3 を設定します。
呼び出しは次のとおりです:
コードをコピーします
コードは次のとおりです: var obj = new ClassA( ); obj.method1(1).method2(2).method(3); // obj -> > 表示可能 obj に対する 3 回の連続操作後、ClassA の N 個のメソッドがこのように定義されている限り、呼び出しチェーンは継続します。
このメソッドの欠点は、チェーン メソッドが 1 つのオブジェクト タイプ (ClaaaA) に一意にバインドされることです。この方法でチェーン操作を実装するには、クラスが定義されるたびに、これをメソッド本体で返す必要があります。 2 番目の方法でこの問題を解決できます。
2. 関数チェーン: オブジェクトが渡された後、各呼び出しは関数自体を返します
コードをコピーします
return function(){
var Self = argument.callee Self; obj = obj;
if(arguments.length==0){
return Self.obj;
}
Self.obj[arguments[0]].apply(Self.obj,[] .slice.call(arguments, 1));
return Self
}
}
//定義された関数/クラス ClassB
function ClassB(){
this.prop1 = null;
this .prop2 = null;
this.prop3 = null;
ClassB.prototype = {
method1 : function(p1){
this.prop1 = p1 ;
},
メソッド 2 : function(p2){
this.prop2 = p2;
},
メソッド 3 : function(p3){
this.prop3 = p3; 🎜>}
}
これは ClassB のメソッド 1、メソッド 2、およびメソッド 3 で返されなくなったことに注意してください。
呼び出しは次のとおりです:
コードをコピーします
コードは次のとおりです:
。
コードをコピーします
コードは次のとおりです:
// 結果 -> prop1=4,prop2=5,prop3=6
コードをコピー
コードは次のとおりです:
obj
(method3,arg3)
...
関連:
関数チェーンの進化