JS - Class 주의사항
JS 의 Class 의 주의사항이라기보다는 뭔가 자주 실수하는 부분에 대한 간략 메모
getter, setter
Class
내에 선언한 getter, setter
메소드를 호출 할 때 ()
를 사용하지 않는다.
class Aredra {
constructor(age = 1) {
this.age = age;
}
get getAge() {
return this.age;
}
set setAge(age = 1) {
this.age = age;
}
}
const obj = new Aredra(9999);
console.log(obj.getAge);
obj.setAge = 1;
console.log(obj.getAge);
호이스팅
function
의 선언문은 호이스팅이 되지만 class
는 호이스팅 되지 않는다.
try {
const obj = Aredra;
} catch {
console.log("오류 발생");
}
class Aredra {
constructor(age = 1) {
this.age = age;
}
}
static
당연한 이야기일 수 있지만 static
프로퍼티는 인스턴스에 할당 되지 않는다.
class Aredra {
static type = "dev";
constructor(age = 1) {
this.age = age;
}
}
const obj = new Aredra();
console.log(obj.type);
console.log(Aredra.type);
상속 관련
상속 받은 클래스의 경우 생성자가 하위에만 있고 상위 클래스에 없다면 에러가 발생한다.
상위 클래스의 생성자를 쓰며 this
를 사용할 때는 super를
먼저 호출하여야한다.
class Person {
constructor(age = 1) {
this.age = age;
}
}
class Aredra extends Person {
constructor(age, type) {
super(age);
this.type = type;
}
}
오브젝트 상속
Object
는 클래스가 아니므로 extends
를 활용하여 상속 받을 수는 없지만 상속받으면 __proto
에 연결되는 것을 setPrototypeOf()
로 대체하여 상속받은 것처럼 구현 가능하다.