Javascript call 및 apply 응용 장면 및 인 스 턴 스

1.역할 및 응용 장면
call 과 apply 는 Function 의 방법 입 니 다.그의 첫 번 째 매개 변 수 는 this 이 고 두 번 째 는 Function 의 매개 변수 입 니 다.call 과 apply 는 특정한 함수 가 실 행 될 때의 context 즉 문맥 을 바 꾸 기 위해 존재 합 니 다.다시 말 하면 함수 체 내부 this 의 방향 을 바 꾸 기 위해 서 입 니 다.자 바스 크 립 트 의 함 수 는'정의 시 상하 문'과'실행 시 상하 문','상하 문 은 바 꿀 수 있다'는 개념 이 존재 하기 때문이다.양자 의 작용 은 완전히 같 지만 파 라미 터 를 받 아들 이 는 방식 은 그다지 같 지 않다.
call 은 매개 변 수 를 순서대로 전달 해 야 하고 apply 는 매개 변 수 를 배열 에 넣 어야 합 니 다.
예 를 들 어 하나의 함수 func 1 정 의 는 다음 과 같다.var func1 = function(arg1, arg2) {};func 1.call(this,arg 1,arg 2)을 통 해또는 func 1.apply(this,[arg 1,arg 2]);호출 하 다.그 중에서 this 는 당신 이 지정 하고 자 하 는 상하 문 입 니 다.그 는 자 바스 크 립 트 대상(자 바스 크 립 트 의 모든 대상)을 사용 할 수 있 습 니 다.
JavaScript 에서 어떤 함수 의 매개 변 수 는 고정 되 어 있 지 않 습 니 다.따라서 적용 조건 을 말 하려 면 매개 변 수 는 수량 을 명확 하 게 알 고 있 을 때 call 을 사용 하고 확실 하지 않 을 때 apply 를 사용 한 다음 매개 변 수 를 배열 에 전달 합 니 다.매개 변수 수량 이 확실 하지 않 을 때 함수 내부 에서 도 arguments 라 는 배열 을 통 해 모든 매개 변 수 를 편리 하 게 할 수 있 습 니 다.
2.콜 과 apply 가 존재 하 는 이유
javascript OOP 에서 우 리 는 항상 이렇게 정의 합 니 다.

function cat(){
}
cat.prototype={
food:"fish",
say: function(){
alert("I love "+this.food);
}
}
var blackCat = new cat;
blackCat.say();
그러나 만약 에 우리 에 게 whiteDog={food:"bone"}대상 이 있다 면 우 리 는 그것 에 대해 say 방법 을 다시 정의 하고 싶 지 않다.그러면 우 리 는 call 또는 apply 를 통 해 BlackCat 의 say 방법:BlackCat.say.call(whiteDog)을 사용 할 수 있다.
따라서 콜 과 apply 는 this 를 동태 적 으로 바 꾸 기 위해 나타 난 것 임 을 알 수 있 습 니 다.하나의 object 에 어떤 방법 이 없 지만 다른 것 은 콜 이나 apply 를 통 해 다른 대상 의 방법 으로 조작 할 수 있 습 니 다.
많이 사용 되 는 document.getElement sByTagName 을 통 해 선택 한 dom 노드 는 array 와 유사 한 array 입 니 다.Array 의 push,pop 등 방법 을 사용 할 수 없습니다.우 리 는 통과 할 수 있다.var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));이렇게 하면 domNodes 는 Array 의 모든 방법 을 응용 할 수 있다.
예 3
call 의 첫 번 째 인 자 는 이 함 수 를 호출 할 대상 을 지정 하 는 데 사 용 됩 니 다.예 를 들 어 changesStyle 함 수 는 box 대상 에 의 해 호출 됩 니 다.this 는 box 대상 을 가리 키 고 있 습 니 다.

function changeStyle(attr, value){
  this.style[attr] = value;
}
var box = document.getElementById('box');
window.changeStyle.call(box, "height", "200px");

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기