티스토리 뷰

이론/JS

[JS] class - super

millfeel1298 2021. 2. 23. 22:48

 

# 02:40

super() =>  부모 constructor를 호출하는데, 자식 constructor 내부에서만 사용 할 수 있다.

 

 

# 03:56

super.method() =>  부모 클래스에 정의된 method를 호출한다.


화살표 함수에는 super가 없다.

class Rabbit extends Animal {
  stop() {
    setTimeout(() => super.stop(), 1000); // 1초 후에 부모 stop을 호출합니다.
  }
}

화살표 함수의 super stop() super와 같아서 위 예시는 의도한 대로 동작한다.

[의도한 대로 동작하는 이유]
setTimeout메서드는 브라우저 환경에서 인수로 전달받은 함수를 호출할 때, this에 window를 할당한다.
이 문제를 해결하기 위해 래퍼(감싸는) 함수를 사용해 보통 때처럼 메서드를 호출하게 만들 수 있다.

그렇지만 setTimeout안에서 ‘일반’ 함수를 사용하면 에러가 발생한다. 

// 래퍼함수가 없기 때문에 super는 window에서 stop()을 찾게된다.
// window에는 stop()이 없기 때문에 에러가 출력된다.
setTimeout(function() {super.stop()}, 1000);

[공부 좌표]

12. super

super

메서드 오버라이딩

Q. setTimeout/setInterval의 this가 이상해요.

'이론 > JS' 카테고리의 다른 글

[JS] Q. 함수는 객체이다?  (0) 2021.02.25
[JS] Object.create()  (0) 2021.02.24
[JS] Element.closest()  (0) 2021.02.23
[JS] 화살표 함수  (0) 2021.02.19
[JS] 배열을 추가, 교체, 삭제 하는 방법 - Array.prototype.splice()  (0) 2021.02.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함