1. メソッド本体はオブジェクト インスタンス自体を返します (this)
関数 ClassA(){
this.prop1 = null;
this.prop3 = null; ClassA.prototype = {
method1 : function(p1){
this.prop1 = p1;
return this;
},
method2 : function(p2){
this. prop2 = p2;
これを返します;
},
メソッド 3 : function(p3){
this.prop3 = p3;
これを返します; >
関数/クラス ClassA が定義されています。 prop1、prop2、prop3 という 3 つの属性/フィールドがあり、3 つのメソッド method1、method2、method3 がそれぞれ prop1、prop2、prop3 を設定します。
チェーン呼び出しは次のとおりです:
コードをコピーします
このメソッドの欠点は、チェーン メソッドが 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( ,[].slice.call (arguments,1));
return Self
}
}
//定義された関数/クラス ClassB
function ClassB(); 🎜>this.prop1 = null;
this.prop2 = null;
ClassB.prototype = {
method1 : function(p1){
this.prop1 = p1 ;
}、
メソッド 2 : function(p2){
this.prop2 = p2;
}、
メソッド 3 : function(p3){
.prop3 = p3;
}
}
これは ClassB のメソッド 1、メソッド 2、およびメソッド 3 では返されなくなったことに注意してください。
チェーン呼び出しは次のとおりです:
コードをコピーします
コードは次のとおりです:
var obj = new ClassB();
chain(obj)('method1',4)('method2',5)('method3',6); // obj -> prop1=4,prop2 =5,prop3=6
コードをコピー
コードは次のとおりです。
// result -> =5,prop3=6
var result =chain(obj)('method1',4)('method2',5)('method3',6)();
コードをコピーします
コードは次のとおりです。
obj
.method1(arg1)
.method2(arg2)
...
ついに、Muhai のおかげで、理解できました。ちょっとした図書館から 上記からインスピレーションを得てください。
/201101/yuanma/chain.rar