ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascriptスキルにおけるチェーンコールの研究

JavaScript_javascriptスキルにおけるチェーンコールの研究

WBOY
WBOYオリジナル
2016-05-16 18:08:12849ブラウズ

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
.method1(arg1) .method2(arg2) .method3(arg3) ... chain(obj) (method1,arg1) (method2, arg2 )
(method3,arg3)
...


関連:

関数チェーンの進化

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