내가 class를 하나 만들고 싶은데 이게 내가 기존에 만들어놨던 class의 요소(?)를 넣어서 만들고싶을 때 사용
class A{
constructor(name) {
this.이름 = name;
}
}
만약에 내가 새로 만들 class B에 저 내용이 필요하다면 뭐 복붙해서 쓰면 되겠지만 내용이 너무 길어질 수 있음.
그럴때 extends를 사용하면 기존에 있던 class의 내용을 그대로 복붙한 효과를 볼 수 있음.
있어보이게 말하면 "다른 class를 상속해서 만들 수 있게 도와주는 문법".
class B extends A {
}
let B로만든변수 = new B('종혁')
B로만든변수 // 이름 = '종혁'
그대로 상속되는걸 볼 수 있음
이렇게 빈거 그대로 상속해도 되고 여기에 내가 따로 추가하고 싶은 내용을 넣을수도 있음
대신 이럴거면 super라는걸 써야됨
class B extends A {
constructor( ) {
this.성적 = 'A' - 이렇게쓰면 오류남
}
class B extends A {
constructor(name) {
super(name) - 꼭 파라미터를 입력해줘야지 속성을 정확히 상속받을 수 있음 (꼭 똑같이 name으로 안해도 됨)
this.성적 = 'A' }
}
가져오고 싶은 파라미터 입력해줘야됨!!
let B로만든변수 = new A('민정')
B로만든변수 // {이름 : 민정 , 성적 : A} 이렇게 A class를 온전히 파라미터로 변경하는것까지 다 상속가능
그냥 내가 한번 해본건데
class B extends A {
constructor(name,성적) {
super(name);
this.grade = 성적 }}
이렇게 새로만드는 class에도 파라미터 넣어서 만들고싶으면 처음 상속할 class 파라미터 먼저 입력하고 그 다음에 내가 새로운 class에 넣고싶은 파라미터 넣어서 new B(맨처음파라미터,새로만든거파라미터) 해도 잘 나오는듯
한마디로 그냥 저 super가 위의 constructor를 복붙한 값을 가지고 있는거임 - 그러니 파라미터가 있어야 작동할 수 있음
super가 용도가 하나 더 있는데
super를 constructor 안에서 안쓰면 super가 그냥 부모 prototype을 의미하게됨
super.부모에있는함수( ) 를 실행하게되면 말그대로 부모 prototype에 있는 함수를 실행해줌
'JS' 카테고리의 다른 글
Destructing 문법 (0) | 2022.10.05 |
---|---|
get/set (0) | 2022.10.02 |
class 함수 (0) | 2022.10.01 |
prototype (0) | 2022.10.01 |
파라미터 값 array로 저장하는 기능 - arguments / rest (0) | 2022.09.30 |