❗문제발생!
export default class AppError extends Error {
static PREFIX = "[ERROR]";
constructor(message) {
super(`\\n${AppError.PREFIX} ${message}\\n`);
this.name = this.constructor.name;
}
}
Error를 커스텀하여 사용하기 위해, 다음과 같은 코드를 사용하였습니다.
저는 여기서 static 키워드를 사용 것에 대한 의문을 가졌습니다.
하지만 static을 뺀 아래 코드는 에러가 발생하였습니다.
export default class AppError extends Error {
PREFIX = "[ERROR]";
constructor(message) {
super(`\\n${this.PREFIX} ${message}\\n`); // ERROR 발생!
this.name = this.constructor.name;
}
}
❓왜 에러가 발생했을까?
이는 super()함수와 연관있습니다.
super는 부모 클래스를 참조할 수 있는 키워드인데요, super메서드의 특징은 다음과 같습니다.
- constructor 내부에서만 사용할 수 있다.
- super()를 호출하기 이전 this를 사용할 수 없다.
즉 위에서 오류가 발생한 이유는, super()가 호출되기 이전 this에 접근하여 PREFIX로 인스턴스에 접근하려고 했기 때문이었습니다.
static으로 선언하면, 클래스를 통해 접근이 가능하여 static을 작성해주는 것이었습니다.
'Front End > Javascript' 카테고리의 다른 글
가비지 컬렉션 정리 (0) | 2024.11.21 |
---|---|
[JS] Element 함수 matches()를 이용한 이벤트 추가 (0) | 2024.03.07 |
[Javascript] Object.freeze()된 객체는 변경할 수 없을까? (0) | 2023.11.10 |
[Javascript] If 조건문과 Switch 조건문의 차이 (0) | 2023.11.07 |
[Javascript] Jest 실패한 테스트만 실행시켜보자. watch 모드 기능 (0) | 2023.11.03 |