JavaScript 의 call 방법 과 apply 방법 사용 비교

3843 단어
방법 정의 call 방법: 문법: call ([thisObj [, arg 1 [, arg 2 [,   [,. argn]]]] 정의: 한 대상 을 호출 하 는 방법 으로 다른 대상 으로 현재 대상 을 교체 합 니 다.설명: 콜 방법 은 다른 대상 을 대체 하여 하나의 방법 을 호출 할 수 있 습 니 다.call 방법 은 함수 의 대상 컨 텍스트 를 초기 컨 텍스트 에서 thisObj 가 지정 한 새로운 대상 으로 변경 할 수 있 습 니 다.thisObj 인 자 를 제공 하지 않 으 면 Global 대상 은 thisObj 로 사 용 됩 니 다.
apply 방법: 문법: apply ([thisObj [, argArray]]) 정의: 특정한 대상 의 방법 을 사용 하여 다른 대상 으로 현재 대상 을 교체 합 니 다.설명: argArray 가 유효한 배열 이 아니 거나 arguments 대상 이 아니라면 TypeError 를 초래 할 수 있 습 니 다.argArray 와 thisObj 의 매개 변 수 를 제공 하지 않 으 면 Global 대상 은 thisObj 로 사용 되 고 매개 변 수 를 전달 할 수 없습니다.  상용 실례 a,

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

 이 예 는 sub, add. call (sub, 3, 1) = = add (3, 1) 를 add 로 교체 한 다 는 뜻 이기 때문에 실행 결 과 는: alert (4); / /메모: js 의 함 수 는 사실 대상 이 고 함수 명 은 Function 대상 에 대한 참조 입 니 다.  b、

function Animal(){ 
 this.name = "Animal"; 
 this.showName = function(){ 
  alert(this.name); 
 } 
} 
 
function Cat(){ 
 this.name = "Cat"; 
} 
 
var animal = new Animal(); 
var cat = new Cat(); 
 
//  call apply  ,     Animal   showName()      cat    。 
//     "Cat" 
animal.showName.call(cat,","); 
//animal.showName.apply(cat,[]); 

 call 은 animal 의 방법 을 cat 에 올 려 서 실행 한 다 는 뜻 입 니 다. 원래 cat 는 show Name () 방법 이 없 었 는데 지금 은 animal 의 show Name () 방법 을 cat 에 올 려 서 실행 하고 있 기 때문에 this. name 은 Cat 일 것 입 니 다.  c. 상속 실현

function Animal(name){  
 this.name = name;  
 this.showName = function(){  
  alert(this.name);  
 }  
}  
 
function Cat(name){ 
 Animal.call(this, name); 
}  
 
var cat = new Cat("Black Cat");  
cat.showName(); 

 Animal. call (this) 은 이 대상 을 Animal 대상 으로 대체 한 다 는 뜻 입 니 다. 그러면 Cat 에 Animal 의 모든 속성 과 방법 이 있 지 않 습 니까? Cat 대상 은 Animal 의 방법 과 속성 을 직접 호출 할 수 있 습 니 다.  다 중 상속

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 의 계승 은 다른 방법 도 있 습 니 다. 예 를 들 어 원형 체인 을 사용 하 는 것 은 본 고의 범주 에 속 하지 않 고 여기 서 콜 의 용법 을 설명 합 니 다.콜 을 말 했 습 니 다. 물론 apply 도 있 습 니 다. 이 두 가지 방법 은 기본적으로 하나의 뜻 입 니 다. 콜 의 두 번 째 매개 변 수 는 임 의 유형 일 수 있 고 apply 의 두 번 째 매개 변 수 는 배열 이 어야 하 며 arguments 일 수도 있 습 니 다.
JavaScript 의 call 과 apply 방법 은 함수 대상 의 컨 텍스트, 즉 함수 에서 this 가 가리 키 는 내용 을 바 꾸 는 데 사 용 됩 니 다.
호출 방법 은 다음 과 같 습 니 다.

fun.call(obj1, arg1, arg2, ...);
fun.apply(obj2, [arrs]);


구체 적 인 예시:

var Obj1 = {
 name: 'Object1',
 say: function(p1, p2) {
  console.log(this.name + ' says ' + p1 + ' ' + p2);
 }
};

// logs 'Object1 says Good morning'
Obj1.say('Good', 'morning');

var Obj2 = {
 name: 'Object2'
};

// logs 'Object2 says Good afternoon'
Obj1.say.call(Obj2, 'Good', 'afternoon');

// logs 'Object2 says Good afternoon again'
Obj1.say.apply(Obj2, ['Good', 'afternoon again']);


예 를 들 어 일반적인 방식 으로 say 를 호출 할 때 방법 중의 this 는 Obj 1 을 가리 키 고 call 과 apply 를 통 해 호출 할 때 this 는 Obj 2 를 가리 키 는 것 을 알 수 있다.
예 를 들 어 콜 과 apply 의 역할 이 똑 같 고 호출 방법의 차이 도 매개 변수 목록 이 다 를 뿐 임 을 알 수 있다.

좋은 웹페이지 즐겨찾기