1 minute read

  • 클래스 확장은 class Child extends Parent 로 Child class 는 Parent를 상속 받음

  • Child.prototoype.proto가 Parent.prototype 이 되므로 메서드 전체가 상속됨

  • extends 는 프로토타입 기반으로 동작함 (생성자 함수)

  • extends 는 생성자 함수의 “prototype” 사이와 생성자 함수 자체 사이 둘 다 프로토타입 설정함

  • extends 뒤에 표현식도 올 수 있음

  • super.method(..) 는 부모 클래스에 정의된 method 호출

  • super(…) 는 부모 생성자 호출. 자식 생성자 내부에서만 사용할 수 있음

  • 메서드 오버라이딩은 Child 에 정의된 메서드에서 super.method() 를 사용해 Parent에 정의된 메서드 사용할 수 있음

  • 화살표 함수는 super 지원하지 않으며 super접근 시 super를 외부 함수에서 가져옴

  • 클래스가 다른 클래스 상속받고 contructor 가 없는 경우엔 비어있는 constructor가 만들어지고 super()로 부모 생성자 호출

  • 일반 클래스의 생성자 함수는 new와 함께 실행시 빈 객체 만들어지고 this에 이 객체 할당

  • 상속 클래스의 생성자 함수 실행 시 상속 클래스의 생성자 함수는 빈 객체를 만들고 this에 이 객체 할당하는 일 부모 클래스의 생성자가 처리해주길 기대함

  • 생성자 오버라이딩은 this를 사용하기 전에 Child 생성자 안에서 오버라이딩 하고 싶은 프로퍼티 인자에 넣은 super() 로 부모 생성자 반드시 호출해야 함

  • 필드 초기화 순서는 부모 클래스가 없을 시 생성자 실행 이전에 초기화되고, 있을 시 super() 실행해서 부모 생성자 호출 직 후 초기화되기 때문에 필드 오버라이딩시 주의 필요(문제 발생 시 getter나 setter 사용)

  • this와 super 이용해 prototype 체이닝 할 경우 this가 자기 자신이기 떄문에 자기 자신 호출 무한루프 할 수 있음

  • 메서드는 내부 프로퍼티 [[HomeObject]] 에 자신이 정의된 클래스와 객체 기억해놓음

  • [[HomeObeject]] 는 오직 super내부에서만 유효함

  • super는 [[HomeObject]] 사용해 부모 메서드 찾음

  • super 가 있는 메서드는 객체 간 복사 시 제대로 동작하지 않을 수 있음(메서드 자율성 보장 없음)

  • [[HomeObject]] 가 제대로 동작하려면 메서드를 반드시 method() 형태로 정의(“method:function()” 형태로 정의시 안 됨)

  • 화살표 함수는 this 나 super 갖지 않으므로 주변 컨텍스트와 잘 들어맞음

Categories: ,

Updated: