자바 스 크 립 트 의 두 가지 체인 호출 실현 코드
1933 단어 체인 호출
function ClassA(){
this.prop1 = null;
this.prop2 = null;
this.prop3 = null;
}
ClassA.prototype = {
method1 : function(p1){
this.prop1 = p1;
return this;
},
method2 : function(p2){
this.prop2 = p2;
return this;
},
method3 : function(p3){
this.prop3 = p3;
return this;
}
}
function/클래스 ClassA 를 정의 합 니 다.세 가지 속성/필드 prop 1,prop 2,prop 3,세 가지 방법 methed 1,method 2,method 3 는 각각 prop 1,prop 2,prop 3 를 설정 합 니 다.체인 호출 은 다음 과 같다.이 방식 은 체인 방법 이 하나의 대상 유형(ClaaaA)에 유일 하 게 연결 되 어 있 는 것 이 단점 이다.이런 방식 으로 체인 조작 을 실현 하고 하나의 종 류 를 정의 할 때마다 그 방법 체 에서 this 로 돌아 가 야 한다.두 번 째 방식 은 이 문 제 를 해결 할 수 있다.2.대상 이 들 어 온 후 매번 함수 자 체 를 되 돌려 줍 니 다
var obj = new ClassA();
obj.method1(1).method2(2).method(3); // obj -> prop1=1,prop2=2,prop3=3
ClassB 의 method 1,method 2,method 3 에서 this 를 되 돌려 주지 않 습 니 다.체인 호출 은 다음 과 같다.쓰기 에서 다음 두 가지 호출 방식 을 요약 한다
/**
* chain
* @param {Object} obj
*/
function chain(obj){
return function(){
var Self = arguments.callee; Self.obj = obj;
if(arguments.length==0){
return Self.obj;
}
Self.obj[arguments[0]].apply(Self.obj,[].slice.call(arguments,1));
return Self;
}
}
// function/ ClassB
function ClassB(){
this.prop1 = null;
this.prop2 = null;
this.prop3 = null;
}
ClassB.prototype = {
method1 : function(p1){
this.prop1 = p1;
},
method2 : function(p2){
this.prop2 = p2;
},
method3 : function(p3){
this.prop3 = p3;
}
}
마지막 으로 목욕 해 주 셔 서 감사합니다. 저 는 wee 창고 에서 이상 의 영감 을 얻 었 습 니 다/201101/yuanma/chain.rar