>  기사  >  웹 프론트엔드  >  JavaScript의 연쇄 호출에 관한 연구

JavaScript의 연쇄 호출에 관한 연구

高洛峰
高洛峰원래의
2016-11-25 10:54:36944검색

메서드 체인은 일반적으로 객체에 대한 연속 작업에 적합합니다(한 줄의 코드에 집중). 어느 정도 코드량을 줄일 수는 있지만, 함수의 반환 값을 차지한다는 단점이 있습니다.

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

view sourceprint?01 function ClassA(){

02 this.prop1 = null;

03 this.prop2 = null;

04 this.prop3 = null

06 ClassA.prototype = {

07 method1 : function(p1){

08 this.prop1 = p1;

09 return this; >

11 method2 : function(p2){

12 this.prop2 = p2;

13 return this; 15 method3 : function(p3){

16 this.prop3 = p3;

17 return this

18 }

19 }

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

호출은 다음과 같습니다.

view sourceprint?1 var obj = new ClassA()

2 obj.method1(1).method2(2).method(3) ; // obj -> prop1=1,prop2=2,prop3=3

ClassA의 N개의 메소드가 연속으로 실행되는 것을 볼 수 있습니다. 이런 방식으로 정의되면 호출 체인은 계속됩니다.


이 메서드의 단점은 체인 메서드가 하나의 개체 유형(ClaaaA)에 고유하게 바인딩된다는 것입니다. 이러한 방식으로 체인 작업을 구현하려면 클래스가 정의될 ​​때마다 해당 메서드 본문에 이를 반환해야 합니다. . 두 번째 방법으로 이 문제를 해결할 수 있습니다.

2. 함수 체인: 객체가 전달된 후 각 호출은 함수 자체를 반환합니다.

view sourceprint?01 /**

02 * 체인 단순화 버전

03 * @param {Object} obj

04*/

05 함수 체인(obj){

06 return function(){

07 var Self = 인수.callee; Self.obj = obj; if(arguments .length==0){

09 return Self.obj;

10 }

11 Self.obj[arguments[0]].apply(Self .obj, [].slice.call(arguments,1));

12 return Self

13 }

14 }

15

16 //정의된 함수/클래스 ClassB

17 function ClassB(){

18 this.prop1 = null

19 this.prop2 = null; ;

20 this.prop3 = null;

21 }

22 ClassB.prototype = {

23 method1 : function(p1){

24 this.prop1 = p1;

25 },

26 method2: function(p2){

27 this.prop2 =

28 },

29 method3 : function(p3){

30 this.prop3 = p3

31 }

32 }

ClassB의 method1, method2, method3에서는 더 이상 반환되지 않습니다.

호출은 다음과 같습니다.

view sourceprint?1 var obj = new ClassB()

2 chain(obj)(method1,4)(method2,5)(method3 ,6) ; // obj -> prop1=4,prop2=5,prop3=6

첫 번째 메서드는 세 번의 호출 후에 객체 자체를 반환합니다. 여기서는 빈 "()"가 사용됩니다. 그것을 검색하려면 Object

view sourceprint?1 // result -> prop1=4,prop2=5,prop3=6


2 var result = chain(obj)(method1,4) (method2, 5)(method3,6)();

이런 방식으로 클래스를 작성하면 메서드 본문에서 이를 반환할 필요가 없으며 어떤 객체에 대해서도 체인 호출이 가능합니다.

두 가지 호출 방법:

view sourceprint?01 obj

02 .method1(arg1)

03 .method2(arg2)

04 .method3(arg3)

05 ...

06

07 chain(obj)

08 (method1,arg1)

09(메소드2,arg2)

10(메소드3,arg3)

11 ...

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