call, apply, bind 메서드

2020. 3. 10. 12:16웹/Javascript

메서드 빌려쓰기 - call, apply, bind

 

 

call 과 apply 

  • 첫번째 인자로 실행할 대상 함수의 this 값을 대체할 다른 객체를 전달 받음

  • 두번째 인자로 call 함수의 경우 호출할 함수에 전달할 매개변수를 별개의 인자들로 받으며, apply 함수의 경우 call 과 다르게 함수에 전달할 매개변수를 배열로 받음

 

예제

const Jack = {
    name: 'Jack',
};

const info = function(age, city) {
    console.log(this);
    console.log(`name : ${this.name}, age : ${age}, city: ${city}`);
};

info(12, 'Daegu');                 --  ①
info.call(Jack, 12, 'Incheon');    --  ②
info.apply(Jack, [12, 'Guro']);    --  ③

 

출력결과

 

설명

① 실행 시, this 는 window 객체를 가리킴

②,③ 실행 시, call/apply 함수의 첫번째 파라미터에 this를 Jack으로 대체, call/apply의 두번째 인자에서 차이점 발생

 

 

 

bind 

  • this 값을 대체할 다른 객체를 전달 받음

  • call/apply 함수는 해당 함수를 즉시 실행시키는 반면, bind 함수의 경우 즉시 실행시키지 않고 새로운 함수를 리턴

  • 함수를 즉시 실행 대신 특정 변수에 저장, 특정 조건 성립 또는 필요 시 저장한 변수를 가져와 실행 할 경우 bind 함수 사용

 

예제

const Jack = {
    name: 'Jack',
};

const info = function(age, city) {
    console.log(this);
    console.log(`name : ${this.name}, age : ${age}, city: ${city}`);
};

const jackInfo = info.bind(Jack, 12, 'Incheon'); 
jackInfo();

 

설명

bind 한 결과 리턴되는 함수를 jackInfo 에 저장, 이후 필요한 시점에 함수를 실행

 

 

 

 

 

 

참고

https://soldonii.tistory.com/67?category=862198

 

 

' > Javascript' 카테고리의 다른 글

Scroll 이벤트를 활용한 스크롤 구현  (0) 2020.06.25
이벤트 전달 방식(버블링, 캡처, 위임)  (0) 2020.06.15
스코프와 클로저  (0) 2020.03.05
스코프 체인  (0) 2020.03.05
실행 컨텍스트  (0) 2020.03.05