[ES6+] 클래스에서의 super


하지만 이제 Admin의 매개변수에 더 많은것들을 집어넣고 싶다.

왜냐면 보통 extends 를 쓰면 User 클래스의 이상(User의 기능을 포함하여) 의 무언가를 넣고 싶어서 만들었을 확률이 높기 때문이다



User클래스를 extends 한 Admin이라는 클래스를 하나 더 만들고 그 안의 값을 불러오려고 하면 undefined이 뜬다.

전 post마지막 부분 참고!

왜냐면 새로만든 Admin클래스에서는 constructor을 만들어주지 않았기 때문이다.

이 Admin클래스에서는 User클래스의 constructor에는 접근이 가능하지만, 본인 클래스를 이용해서 접근할수는 없다(Admin클래스 내에 constructor가 없기 때문에!)

그래서 Admin클래스 내에 contructor을 생성하면 이번에는 User클래스의 constructor에는 접근하지 못한다

그때 Admin클래스에도, User클래스에도 모두 접근이 가능하도록 도와주는것이 super 이다.

super은 base class의 constructor을 호출한다

class User{
	construntor({username, lastNAme, email, password}){
		this.username = username;
    this.lastName = lastName;
    this.email = email;
    tihs.password = password;
	}
  sayHello(){
    console.log(`hi my name is ${this.username}`);
  }
  updatePassword(newPassword, currentPassword){
    if(currentPassword === this.password){
      this.password = newPassword;
    }else{
      console.log("can't change password");
    }
  }
}

const sexyUser = new User({
  username:"sora",
  lastName:"ji",
  email:"wlthfk0211@gmail.com",
  password:"1234"
});


class Admin extends User{
  constructor({username, lastNAme, email, password, superAdmin, isActive}){
    super(userOptions);	//base class즉, User클래스의 contructor를 호출한다
    this.superadmin = superAdmin;
    this.isActive = isActive;
  }
}

const admin = new Admin({
  username:"sora",
  lastName:"ji",
  email:"wlthfk0211@gmail.com",
  password:"1234"
})

코드가 좀 길긴하지만 Admin클래스에서만 User클래스에 접근할수있고, sexyUser에서는 접근이 불가능하다

sexyUser는 User클래스의 인스턴스이고 admin는 User클래스와 Admin클래스의 인스턴스이다







노마드코더의 ‘ES6의 정석’을 듣고 정리 =)




© 2018. by sora

Powered by sora