티스토리 뷰
반응형
JS를 사용하다보면 함수 내부에서 this 참조가 원하지 않는 객체를 참조하거나 아예 유실되어버리는는 경우가 종종 발생한다.
이러한 경우에 사용할 수 있도록 JS에서는 Function.prototype의 call, apply, bind를 제공하고있으며, 세 메소드는 모두 함수에 this 참조를 연결한다는 공통점을 갖지만 사용법 측면에서 다음과 같은 소소한 차이가 있다.
- Function.prototype.call: 함수 내부에서 참조할 this와 매개 변수 목록을 하나씩 나열하여 전달하는 식으로 함수를 호출한다.
- Function.prototype.apply: 함수 내부에서 참조할 this와 매개 변수 목록을 배열로 전달하는 식으로 함수를 호출한다.
- Function.prototype.bind: 함수 내부에서 참조할 this를 전달하여 새로운 함수를 반환한다.
즉, call과 apply는 대상 함수를 즉시 호출하지만 bind는 새로운 함수를 반환한다는 점을 기억하자.
코드 예시
- 아래의 call과 apply 메소드 호출, 그리고 bind를 통해 생성된 bounded 함수의 호출은 모두 같은 결과를 반환한다.
const me = {
name: 'ingnoh',
};
function show(alias, age) {
console.log(this.name, alias, age);
}
show('monkey', 3); // undefined monkey 3
show.call(me, 'monkey', 3); // ingnoh monkey 3
show.apply(me, ['monkey', 3]); // ingnoh monkey 3
const bounded = show.bind(me);
bounded('monkey', 3); // ingnoh monkey 3
참고
'Dev. > javascript' 카테고리의 다른 글
[JS] 파일 이름으로 사용할 수 없는 문자만 인코딩하기 (0) | 2023.02.08 |
---|---|
[JS] Promise가 아닌 값에 대한 await는 어떻게 처리될까? (0) | 2022.12.15 |
[JS] 클래스에 async getter 작성하기 (0) | 2022.10.07 |
[JS] 값이 null 또는 undefined인지 확인하기 (0) | 2022.10.04 |
[JS] 객체 배열을 문자열 기준으로 정렬하기 (0) | 2022.09.19 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- etc
- Docker
- 코딩테스트
- Java
- terraform
- spring boot
- hashicorp
- AWS IoT
- Puppeteer
- Gradle
- JEST
- jQuery
- AWS
- Database
- Linux
- Git
- Node.js
- postgresql
- react
- Spring Cloud Config
- shell
- javascript
- eureka
- kotlin
- IntelliJ
- dev
- pgloader
- mysql
- JPA
- Vault
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함