앞서 정리한 내용에서 this는 실행 컨텍스트가 생성될때 결정되고,
어떻게 불리느냐에 따라서 this가 달라지며, 어떤 상황에서 전역객체를 가리키고, 렉시컬 객체를 가르키는지 정리했었다.
그 중 콜백함수 호출 시 그 내부에서의 this는 생각했던것과 다르게 this를 가리키고 있었는데,
이에 관해 this를 바인딩하는 방법에 대해 정리해보도록 한다.
바인딩
메서드와 객체를 this로 묶어놓는 것을 말한다
1 call 메서드 사용
반환값 : this(첫번째 인자) 와 매개변수(나머지 인자)로 호출된 함수의 값이 반환된다.
2 apply 메서드 사용
반환값 : this(첫번째 인자) 와 매개변수(배열)로 호출된 함수의 값이 반환된다.
call과 apply메서드는 서로 같으나, 차이로는 매개변수로 사용할 인자들의 나열법 차이인데,
call은 쭉 나열하면 첫번째 인자를 제외한 나머지를 매개변수로 사용하고,
apply는 두번째 인자를 배열로 받아 배열 안에 있는 값들을 매개변수로 사용한다.
null 및 undefined는 전역 객체로 대체되고 원시값은 객체로 변환된다
위의 예제를 보면 call과 binding을 사용해서 this를 첫번째 인자로 바인딩 해 주었다.
하지만 call을 사용한 예제에서는 this값이 원시값인데 그것을 그대로 넘겨주었더니 유사배열객체로 변환되어 반환되었다.
이점을 유의해서 사용해야한다.
2 - 2 | 유사배열 객체에서 this를 바인딩 : Array.from 사용
* Array.from
유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운Array 객체를 만든다.
위의 예제에서 유사배열 객체로 반환된 binding값을
Array.from으로 배열로 반환받아 apply의 인자로 사용해 매개변수로 사용한 예제이다.
3 bind 메서드 사용
call과 비슷하지만 함수를 호출하는 것이 아니라 넘겨받은 this및 인자들을 넘겨받아 반환만 한다
1 ) bind 메서드는 함수 호출시가 아닌, 할당 시 this를 미리 적용할 수 있다.
함수를 변수에 할당해서 미리 this를 지정해두고 사용
2 ) 부분 적용 함수 구현 → 디폴트 매개 변수를 bind시 결정할 수 있다.
bind로 this를 미리 지정하는데, 미리 디폴트 변수를 설정 해 놓을 수 있다
(후에 함수 호출시 인자는 매개변수로써 뒤에 이어져서 사용됨)
bind의 name 프로퍼티
bind로 this를 설정한 함수는 name 프로퍼티 앞에 bound라는 단어가 붙는다
(어떨때 사용하는지는 아직 잘 모르겟지만...😂)
✓ 참고
[ 코어 자바스크립트 - 저자 정재남 ]
'JavaScript' 카테고리의 다른 글
[JavaScript] 내부함수와 외부함수, 그리고 '클로저' (0) | 2020.11.17 |
---|---|
[JavaScript] 콜백함수의 this와 콜백지옥 (0) | 2020.11.16 |
[Javascript] 자바스크립트의 this (0) | 2020.11.11 |
[Javascript] 실행 컨텍스트와 호이스팅, 스코프체인 (0) | 2020.11.03 |
[Javascript] 실행 컨텍스트와 환경정보 (0) | 2020.11.02 |