>  기사  >  웹 프론트엔드  >  JavaScript 학습 팁: 호출과 적용의 차이점

JavaScript 학습 팁: 호출과 적용의 차이점

高洛峰
高洛峰원래의
2017-01-12 11:35:021447검색

1. call
call method
현재 객체를 다른 객체로 대체하기 위해 객체의 메소드를 호출합니다.
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
매개변수
thisObj
선택 사항. 현재 객체로 사용될 객체입니다.
arg1, arg2, , argN
선택 사항. 일련의 메소드 매개변수가 전달됩니다.
설명
call 메소드는 다른 객체 대신 메소드를 호출하는 데 사용할 수 있습니다. call 메소드는 함수의 객체 컨텍스트를 초기 컨텍스트에서 thisObj가 지정한 새 객체로 변경합니다.
thisObj 매개변수가 제공되지 않으면 전역 개체가 thisObj로 사용됩니다.
간단한 예(함수 호출):

function add(a,b) 
{ 
alert(a+b); 
} 
function sub(a,b) 
{ 
alert(a-b); 
} 
add.call(sub,3,1);

이 예의 의미는 sub를 add, add.call(sub,3,1) == add(3,1) 로 바꾸는 것입니다. 실행 결과는 다음과 같습니다. 더 복잡한 예(메서드 호출):

function Class1() 
{ 
this.name = "class1"; 
this.showNam = function() 
{ 
alert(this.name); 
} 
} 
function Class2() 
{ 
this.name = "class2"; 
} 
var c1 = new Class1(); 
var c2 = new Class2(); 
c1.showNam.call(c2);

호출은 실행을 위해 c1의 메서드를 c2에 넣는 것을 의미합니다. showNam.() 메서드가 있으면 이제 c2에 c1의 showNam() 메서드를 넣어 실행하므로 this.name은 class2여야 하며 실행 결과는 다음과 같습니다. >

이렇게 Class2는 Class1을 상속받습니다. Class1.call(this)은 이 객체 대신 Class1 객체를 사용한다는 의미입니다. 그러면 Class2는 Class1의 모든 속성과 메서드를 갖지 않습니다. Class1의 메소드와 속성의 실행 결과는 다음과 같습니다. 경고("cc")
function Class1() 
{ 
this.showTxt = function(txt) 
{ 
alert(txt); 
} 
} 
function Class2() 
{ 
Class1.call(this); 
} 
var c2 = new Class2(); 
c2.showTxt("cc");
예, 이것이 바로 javaScript가 객체 지향에서 상속을 시뮬레이션하는 방법이며 다중 상속도 구현할 수 있습니다.


다중 상속

매우 간단합니다. 두 번의 호출만 사용하면 다중 상속이 가능합니다.
function Class10() 
{ 
this.showSub = function(a,b) 
{ 
alert(a-b); 
} 
} 
function Class11() 
{ 
this.showAdd = function(a,b) 
{ 
alert(a+b); 
} 
} 

function Class2() 
{ 
Class10.call(this); 
Class11.call(this); 
}
물론 프로토타입 체인을 사용하는 등 js를 상속하는 다른 방법도 있습니다. 이 글의 범위는 단지 call의 사용법을 설명하는 것입니다.

이 두 가지 방법은 기본적으로 동일한 의미입니다.
차이점은 2번째 매개변수입니다. call은 모든 유형이 가능하며 Apply 두 번째 매개변수는 배열이어야 합니다.

2. Apply

는 Apply와 Call의 기능이 동일하지만 둘 사이에는 매개변수에 차이가 있습니다.
첫 번째 매개변수의 의미는 동일하지만 두 번째 매개변수의 경우
apply는 매개변수 배열로 전달됩니다. 즉, 여러 매개변수를 배열로 결합하여 전달하며, call은 호출로 사용됩니다. 매개변수가 전달됩니다(두 번째 매개변수부터 시작).
예를 들어 func.call(func1,var1,var2,var3)의 해당 Apply 작성 방법은 다음과 같습니다. func.apply(func1,[var1,var2,var3])

팁(코드 우아하고 실행효율이 높음)

호출과 적용의 차이점에 대한 더 많은 JavaScript 학습 팁은 PHP 중국어 웹사이트를 참고하세요!
alert(Math.max(5,8)) //8 
alert(Math.max(5,7,9,3,1,6)) //9 

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