bind()
2024년 11월 23일
-
모든 함수(Function)는 this를 수정하게 해주는 내장 메서드(Method) bind를 제공한다.
문법
JavaScript
-
함수(Function).bind(객체(Object))는 함수(Function)처럼 호출 가능한 '특수 객체(exotic object)'를 반환한다.
-
이 객체를 호출하면 this가 객체(Object)로 고정된 함수(Function)가 반환된다.
-
따라서 대입된 변수(Variable)를 호출하면 this가 고정된 함수(Function)를 호출하는 것과 동일한 효과를 본다.
예시
- 아래 예시
funcUser에는this가user로 고정된func이 할당된다.
JavaScript
- 여기서
func.bind(user)는func의this를user로 '바인딩한 변형’이라고 생각하시면 된다. - 인자는 원본 함수
func에 그대로 전달된다.
JSX
- 이제 객체(Object) 메서드(Method)에
bind를 적용해 보자.
JavaScript
-
메서드 user.sayHi를 가져오고, 메서드에
user를 바인딩한다. -
sayHi는 이제 묶인(bound) 함수(Function)가 되어 단독으로 호출할 수 있고 setTimeout()에 전달하여 호출할 수도 있다.
-
어떤 방식이든 컨택스트는 원하는 대로 고정된다.
-
아래 예시를 실행하면 인수는 그대로 전달되고 bind에 의해 this만 고정된 것을 확인할 수 있다.
JavaScript
대규모 바인딩
- bind()를 사용하여 메서드(Method) 전체 바인딩(binding)할 수 있다.
- 객체(Object)에 복수의 메서드가 있고 이 메서드 전체를 전달하려 할 땐, 반복문을 사용해 메서드(Method)를 바인딩할 수 있다.
JavaScript
- lodash 라이브러리를 사용해도 대규모 바인딩을 할 수 있다.