일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- frontend
- Graph
- VIM
- LeetCode
- TypeScript
- Database
- network
- 리트코드
- 안드로이드
- react
- java
- Redux
- Javascript
- Python
- 프로그래머스
- vscode
- 알고리즘
- DFS
- BFS
- Data Structure
- Algorithm
- 그레이들
- db
- DP
- 동적 계획법
- 다이나믹 프로그래밍
- git
- CS
- 자바
- 백준
- Today
- Total
늘 겸손하게
JavaScript - this 키워드 본문
this
this는 object를 가리킨다.
어떠한 object를 가리키는지는 호출되는 상황에 따라 다르다.
상황에 따라 this가 가리키는 object
1. 객체의 메소드 안 this -> 객체를 가리킴
2. this 혼자 사용됨 -> 전역 객체를 가리킴
3. 함수 내부에서 this -> 전역 객체를 가리킴
4. 'strict mode'일때 함수 내부 this -> this는 undefined
5. 이벤트 내부에서 this -> 이벤트를 받은 요소(element)
6. call(), apply(), bind() -> this는 어떤 객체든 가리킬 수 있음
하나씩 알아보자
<예시로 사용할 객체>
const person = {
firstName : "John",
lastName : "Doe",
id : 5500,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
1. 객체 메소드 안의 this
객체 메소드 안의 this는 메소드의 객체를 가리킨다.
위 예시에서 fullName 메소드는 person 객체의 메소드이기 때문에 this는 person 객체를 가리킨다.
2. this 혼자 사용됨
this 혼자 사용되는 경우 전역 객체를 가리킨다.
브라우저의 전역 객체는 'Window'
let x = this;
console.log(x)
3. 함수 내부에서 this
함수 내부에서 this는 디폴트로 global object인 'Window'로 바인딩된다.
function sample() {
return this;
}
console.log(sample())
4. 'strict mode'일때 함수 내부 this
자바스크립트 strict mode는 디폴트 바인딩을 허용하지 않습니다.
그러므로 'strict mode'일때 함수 내부 this는 'undefined'
"use strict"
function sample() {
return this;
}
console.log(sample())
5. 이벤트 내부에서 this
이벤트 내부에서 this는 해당 이벤트를 전달받은 HTML 요소를 가리킨다.
HTML
<body>
<button id="btn">Click me</button>
</body>
JS
const btn = document.getElementById('btn');
btn.addEventListener('click', function(e) {
console.log(this);
});
버튼을 클릭하면 이벤트를 전달받은 button element가 콘솔에 출력된다.
6. Explicit Function Binding - call(), apply(), bind()
자바스크립트에는 call(), apply()와 같은 메소드가 이미 정의되어있다.
6.1 call()
인자로 주어지는 객체의 속성을 사용할 수 있다.
6.2 apply()
call 함수와 비슷하나 call 함수가 인자를 ','로 구분하여 받을때 apply 함수는 인자를 배열로 받는다.
6.3 bind()
bind() 함수로 한 객체는 다른 객체의 메소드를 빌릴 수 있다.
'Programming > JavaScript' 카테고리의 다른 글
JavaScript - Browser: Document (1-1, 1-2) (0) | 2022.08.24 |
---|---|
JavaScript - RequestAnimationFrame() (0) | 2022.08.22 |
JavaScript - 깊은 복사, 얕은 복사 (0) | 2022.08.22 |
JavaScript - 자바스크립트가 유동적인 언어인 이유 (0) | 2022.08.19 |
JavaScript - 자바스크립트 데이터 형 변환 (0) | 2022.08.19 |