>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 기술의 체인 호출에 대한 연구

JavaScript_javascript 기술의 체인 호출에 대한 연구

WBOY
WBOY원래의
2016-05-16 18:08:12883검색

1. 객체 체인: 메소드 본체가 객체 인스턴스 자체를 반환합니다(this)

코드 복사 코드는 다음과 같습니다. :

function ClassA(){
this.prop1 = null;
this.prop2 = null
this.prop3 =
}
ClassA .prototype = {
method1 : function(p1){
this.prop1 = p1;
return this
},
method2 : function(p2){
this.prop2 = p2;
return this;
method3: function(p3){
this.prop3 =
return this;

함수/클래스 ClassA가 정의되어 있습니다. 세 가지 속성/필드 prop1, prop2, prop3이 있고 세 가지 메서드 method1, method2, method3이 각각 prop1, prop2, prop3을 설정합니다.
통화 내용은 다음과 같습니다.



코드 복사
코드는 다음과 같습니다. var obj = new ClassA( ); obj.method1(1).method2(2).method(3) // obj -> prop1=1,prop2=2,prop3=3

볼 수 있음 obj에 대한 세 번의 연속 작업 후 ClassA의 N 메서드가 이러한 방식으로 정의되는 한 호출 체인이 계속됩니다.
이 메서드의 단점은 체인 메서드가 하나의 개체 유형(ClaaaA)에 고유하게 바인딩된다는 것입니다. 이러한 방식으로 체인 작업을 구현하려면 클래스가 정의될 ​​때마다 해당 메서드 본문에 이 값이 반환되어야 합니다. 두 번째 방법으로 이 문제를 해결할 수 있습니다.
2. 함수 체인: 객체가 전달된 후 각 호출은 함수 자체를 반환합니다.




코드 복사
코드 /*** 체인 라이트 버전
* @param {Object} obj
*/
function chain(obj){
return function(){
var Self =args.callee; obj = obj;
if(arguments.length==0){
return Self.obj;
}
Self.obj[arguments[0]].apply(Self.obj,[] .slice.call(인수, 1));
return Self;
}
}
//정의된 함수/클래스 ClassB
function ClassB(){
this.prop1 = null;
this .prop2 = null;
this.prop3 = null
}
ClassB.prototype = {
method1 : function(p1){
this.prop1 = p1 ;
},
method2 : 함수(p2){
this.prop2 = p2;
},
method3 : 함수(p3){
this.prop3 =
}
}


이것은 ClassB의 method1, method2, method3에서 더 이상 반환되지 않습니다.
통화 내용은 다음과 같습니다.



코드 복사
코드는 다음과 같습니다. var obj = new ClassB( ); chain(obj)('method1',4)('method2',5)('method3',6) // obj -> ,prop3=6

첫 번째 메소드는 세 번의 호출 후에 객체 자체를 반환합니다. 여기서는 빈 "()"를 사용하여 객체를 검색합니다



코드 복사
코드는 다음과 같습니다. // result -> prop1=4,prop2=5,prop3=6 var result = chain(obj)('method1' ,4)('method2',5)('method3',6)();

이런 방식으로 클래스를 작성하면 메서드 본문에서 이를 반환해야 하며 모든 개체는 호출을 연결할 수 있습니다.
두 가지 호출 방법:



코드 복사.method2(arg2)
.method3(arg3)
...
chain(obj)
(method1,arg1)
(method2, arg2 )
(method3,arg3)
...


관련:

내 함수 체인의 진화

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.