JavaScript 의 call 방법 과 apply 방법 사용 비교
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 의 역할 이 똑 같 고 호출 방법의 차이 도 매개 변수 목록 이 다 를 뿐 임 을 알 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.