DH의 개발 공부로그
[JavaScript] 자바스크립트의 this 알아보기 본문
자바스크립트에서 this
를 활용하여 작업을 할 수가 있는데,this
가 의미하는 것이 각각의 상황에서 다 다르므로 이해를 잘 하는것이 중요하고,
헷갈릴때는 console.log()
를 활용하는 것이 좋습니다.
그러면 this
에 대해 알아보겠습니다.
구문
this
브라우저의 콘솔창에 this
를 쳐보면
this // window {}
이렇게 this
는 window를 의미합니다.
또 함수에서 this
가 의미하는것은
function a() { console.log(this) }
a() // window {}
역시나 window 입니다.
이렇듯 this
는 기본적으로 window를 의미합니다.
그렇다면 this
가 다른 것을 의미할 때의 상황을 알아보겠습니다.
우선 객체 안에서의 this
입니다.
let obj = {
a : function() { console.log(this) }
}
obj.a(); // 해당객체인 obj
객체안에 this
를 사용하면 this
는 해당 객체를 의미합니다.
단 다음과 같이 사용하면 결과가 달라집니다.
let a2 = obj.a;
a2() // window
호출할때, a2
는 obj.a
를 꺼내온 것 이기 때문에 obj
의 메서드가 아닌 함수여서 this
가 window를 의미합니다.
this
는 class 또는 생성장 함수, 공장함수에서 사용을 많이 하는데 ES6에서 추가된 class문법에서 사용할때 마찬가지로 자기자신이 됩니다.
class Hero {
constructor(name, hp) {
this.name = name
this.hp = hp
}
}
const hero = new Hero("DH", 100);
console.log(hero.name, hero.hp) // DH 100
하지만 특정메서드에서는 콜백함수의 this
를 바꾸기도 합니다. 대표적으로는 이벤트 리스너를 사용했을때입니다.
document.body.addEventListener("click", function() {
console.log(this) // body
})
위에서 확인했을때 함수안에서의 this
는 window를 의미했는데, 이벤트리스너의 콜백함수에서 this
는body
를 의미하는 것으로 바뀝니다.
이러한 문제를 해결하는 방법으로는
첫 번째로 this
를 새로운 변수에 저장을 따로 하거나
document.body.addEventListener // body
const that = this;
function inner() {
console.log('inner', this, that); // inner window body
}
inner();
});
위의 경우에서 this
는 body
를 의미하는 중이고, inner()
함수 안에서의 this
는 window를 의미합니다.
그래서 that
이라는 변수를 이용하여 그 상위 함수의 this
를 가져오게 할 수 있습니다.
두 번째 화살표 함수를 사용하는 것입니다.
document.body.addEventListener('click', function() {
console.log(this); // body
const inner = () => {
console.log('inner', this); // inner body
}
inner();
});
'JavaScript' 카테고리의 다른 글
[JavaScript] 자바스크립트 객체의 길이(length) 구하기! (1) | 2023.02.11 |
---|---|
[JavaScript] 문자열, 배열에서 지정 요소의 위치 찾기 - indexOf(), lastIndexOf() (0) | 2023.02.02 |
[JavaScript] 배열 reduce() 이해하고 사용하기 (0) | 2022.11.16 |
[JavaScript] 배열 정렬 Sort()함수 - 오름차순, 내림차순 (2) | 2022.11.10 |
[JavaScript] 자바스크립트 if문 중첩 제거 (0) | 2022.10.26 |