JavaScript ES5 ( OOP )

◎ apply, call 호출 패턴

자바스크립트에서 함수는 객체이다. 고로 메소드를 가질 수 있다.

 

apply call 은 Function.prototype 의 메소드이다.

모든 함수객체는 Function.prototype 을 prototype 객체로 갖기 때문에 

이 메소드를 사용하여 this 의 값을 선택할 수 있다. 

 

◎ apply( this, [args] )

apply 메소드는 두개의 매개변수를 받는다. 

첫번째는 this 에 바인딩할 값이며, 두번째는 실행할 함수에 넘겨줄 매개변수의 배열이다.

function mul(a,b){
    return a * b;
}   

var nums = [4,5];
var result = mul.apply(null, nums); // 20

위 코드에서는 this 의 값으로 null 을 전달함으로 

자바스크립트의 암묵적인 this 바인딩에 영향을 주지 않았으며,

매개변수로 미리 작성한 nums 배열을 전달하여 계산이 이루어지도록 하였다.

 

함수 실행문맥의 this 를 선택할 수 있기 때문에 

특정 객체의 메소드를 다른 객체를 대상으로 실행할 수 있다.

var Obj = function(name){
    this.name = name;
}
Obj.prototype.getName = function(){
    return this.name;
}
var otherObj = {
    name : "gamza"
}
Obj.prototype.getName.apply(otherObj);  // gamza

 

◎ call( this, args... )

call 메소드는 기본적으로 apply 와 같으나,

this 값 이후의 매개변수를 배열로 받지 않고 나열하여 받는 차이점이 있다.

function mul(a,b){
    return a * b;
}   

var result = mul.apply(null, 4, 5); // 20

 

댓글

댓글 본문
버전 관리
gamza
현재 버전
선택 버전
graphittie 자세히 보기