ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascriptスキルの2種類のチェーンコール実装コード

JavaScript_javascriptスキルの2種類のチェーンコール実装コード

WBOY
WBOYオリジナル
2016-05-16 18:12:08955ブラウズ
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 を設定します。
チェーン呼び出しは次のとおりです:



コードをコピーします

コードは次のとおりです: var obj = new ClassA(); obj.method1(1).method2(2).method(3); // obj -> このように ClassA の N 個のメソッドが定義されている限り、obj が連続して操作されていることがわかります。
このメソッドの欠点は、チェーン メソッドが 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)();
の場合この方法でクラスを作成する場合、メソッド本体にクラスを含める必要はありません。これを返し、任意のオブジェクトへの呼び出しを連鎖させることができます。 2 つの呼び出しメソッドを書き方の観点から要約します。

コードをコピーします

コードは次のとおりです。


obj
.method1(arg1)
.method2(arg2)
.method3(arg3) ... chain( obj) (method1,arg1) (method2,arg2) (method3,arg3)
...


ついに、Muhai のおかげで、理解できました。ちょっとした図書館から 上記からインスピレーションを得てください。


/201101/yuanma/chain.rar
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。