Open bucketHaneul opened 3 years ago
자바스크립트에서는 메서드 내의 내부 함수 호출 패턴을 정의해 놓지 않았기 때문에, 내부 함수의 경우 일반 함수로 취급되어 함수 호출 패턴 규칙에 따라 this는 전역 객체에 바인딩된다. 이러한 this 바인딩의 한계를 극복하기 위해 제공되는 메서드가 call, apply, bind이다.
Call, Apply, Bind 메서드 사용 시, 메서드에 첫 번째 인수로 전달하는 객체에 바인딩 된다.
사용 예시
arguments.shift(); // 에러 발생
Array.prototype.slice.apply(arguments); // 배열 표준 메서드 사용 가능
이들 모두는 Function.prototype 의 메소드이다. Call, Apply는 호출할 함수에 인수를 전달하는 방식만 다를 뿐 동일하게 동작한다.
call - 리스트 형식으로 전달, 함수 호출
apply - 배열로 묶어 전달, 함수 호출
bind - this로 사용할 객체만 전달, 함수 호출하지 않음
call 메서드
apply 메서드
bind 메서드
call, apply, bind 메서드는 Function.prototype의 메서드이다. 즉, 이들 메서드는 모든 함수가 상속받아 사용할 수 있다.
call 메서드와 apply 메서드 공통점
call 메서드
ex) getThisBinding.call(thisArg, 1, 2, 3)
apply 메서드
ex) getThisBinding.call(thisArg, [1, 2, 3])
bind 메서드
ㅁㄴㅇ