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()로 대체하여 상속받은 것처럼 구현 가능하다.

Tags:

Categories:

Updated: