JS (Java Script)

extends() 와 super()

GABOJOK 2023. 9. 7. 18:38

 extends()

옛날 개발자들이 extends라는 문법을 만들었다.

이미 있는 class와 유사한 class를 하나 더 만들고 싶을때 사용한다.

(복사와 비슷하지만 정확히 말하면 상속하는것. )

 

그냥 class하나 더 만들어도 되지만, 복사/상속 할 값이 많은 경우 extends 로 만드는 것이 더 낫기 때문에 사용.. 

 

 

class 할아버지{
   constructor (name, name2){
      this.성 = 'kim';
      this.이름  = name;
      this.이름2 = name2;
   }
   saha(){
      console.log('안녕하시렵니까 할아버지');
   }
};

let 할아버지1 = new 할아버지('만덕', '만득');
console.log(할아버지1);

//할아버지 라는 class와 비슷하게 하나 더 만들고 싶은데, 나이 속성 추가하고 싶음
class 아버지 extends 할아버지 {
   constructor(name, name2){
      //this.나이 = 50 을 하면 오류난다.
      super(name, name2)
      this.나이 = 50;
   }
   saha(){
      console.log('안녕하시렵니까 아버지');
      super.saha();  
   }
}

let 아버지1 = new 아버지('만수','즉흥');
아버지1.saha();
console.log(아버지1)

 

아버지 class 에서 처음에 this.나이 = 50 이 오류나는 이유는 뭘까

extends 해서 만든 class는 this를 바로 사용할 수 없다. super() 사용후 써야함. 

 

super( )

 1. constructor 안에서 쓰면 부모 class의 constructor 가져옴

 2. prototype 함수 안에서 쓰면 부모 class의 prototype 가져옴

 

 

super(name, name2)    이 코드는 즉 이말이다.

extends 로 상속중인 부모 class 의 constructor 받아 가져다 주세요

 

super를 사용할 때에 부모 요소에 파라미터가 있다면 

똑같이 자식요소의 constructor의 괄호 안,

그리고 super의 괄호 안에  그 파라미터를 넣어주기. 

 

 

class 아버지 안에 saha(){} 안에 super.saha() 는??

 

부모 class의 함수를 가져와서 쓰고 싶을때는 이렇게씀. 

(2. super() 는 prototype 안에서 사용되면 부모 class의 prototype을 의미하기도 함. )