자바스크립트에서는 this.<함수>를 callback 등으로 전달할때 this의 class 정보가 무시됩니다.
예를 들어 아래와 같은 코드가 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Test {
constructor(a, b) {
this.a = a
this.b = b
this.test = document.querySelector('.box')
this.test.addEventListener('click', this.onClick)
}
onClick() {
const tot = this.a + this.b
console.log("a+b: " + tot)
}
}
t = new Test(1,2)
|
cs |
clickMe 박스를 클릭할 경우 3이 나오는 코드입니다.
그러나 실제로 해보면 "a+b: NaN"이 나오게 됩니다. 이는 onClick이 addEventListener에 callback형태로 넘겨질때 this에 대한 정보가 없어지기 때문입니다.
이를 위해 this binding을 해주어야합니다. addEventListener 부분을 아래와 같이 바꿔주면 됩니다.
방법1
.addEventListener('click', (event) => this.onClick(event))
방법2
.addEventListener('click', this.onClick)
onClick = (event) => {
...
}
'javascript' 카테고리의 다른 글
자바스크립트 fetch와 axios (0) | 2021.05.15 |
---|---|
자바스크립트 ... 이용하기 (0) | 2021.05.12 |
자바스크립트 싱글스레드와 Event Loop (0) | 2021.05.08 |
javascript var을 쓰지 말아야 하는 이유 (0) | 2021.05.03 |
html파일안에서 script tag의 위치 (0) | 2021.05.03 |