class Teacher extends Person {
constructor(first, last, age, gender, interests, subject, grade) {
this.name = {
first,
last
};
this.age = age;
this.gender = gender;
this.interests = interests;
// subject and grade are specific to Teacher
this.subject = subject;
this.grade = grade;
}
}
class Teacher extends Person {
constructor(first, last, age, gender, interests, subject, grade) {
super(first, last, age, gender, interests);
// subject and grade are specific to Teacher
this.subject = subject;
this.grade = grade;
}
}
클래스 안에서 쓰이는 this는 클래스의 프로퍼티를 정의한다. 자식 클래스가 상속받은 함수가 실행될 때, 그 함수가 부모 클래스에서 받은 함수더라도 this는 프로토타입의 영향을 받지 않으며 this가 쓰이고 있는 자식 클래스를 가리킨다.
자식 클래스에서 this를 이용하여 새로운 프로퍼티를 부여하거나 상속받은 프로퍼티를 수정하고 싶다면 먼저 super()를 이용하여 부모 클래스의 기존 프로퍼티 값을 호출해야 한다.
자식 클래스에서 생성자 함수(constructor)가 실행되면, 생성자 함수는 빈 객체를 만들고 this가 될 객체를 할당하는 일을 부모 클래스의 생성자가 처리해주기를 기대한다. 그렇기 때문에 super()를 호출해서 부모 클래스의 생성자를 실행해주어야만 this가 될 객체가 만들어지고, this를 사용할 수 있게 된다.
-부모 클래스의 함수를 호출할 때 사용된다.
-생성자 함수 내에서 super 키워드는 한 번만 사용할 수 있다.
-생성자 함수 내에서 this 키워드가 나오기 전에 사용돼야 한다.
-생성자 함수 내에서 super를 호출하면 부모 클래스의 생성자 함수를 호출한다.
-Teacher 예제에서 인스턴스를 생성하기 전에는 어떤 과목을 가르칠지 아직 모른다. 학기 도중에 가르치는 과목이 변경될 수도 있다.
-이런 상황에 getter/setter가 필요.
-Getter와 setter는 쌍으로 동작한다. Getter가 현재 값을 반환한다면 그에 대응하는 setter는 해당하는 값을 변경한다.
class Teacher extends Person {
constructor(first, last, age, gender, interests, subject, grade) {
super(first, last, age, gender, interests);
// subject and grade are specific to Teacher
this._subject = subject;
this.grade = grade;
}
get subject() {
return this._subject;
}
set subject(newSubject) {
this._subject = newSubject;
}
}
-subject 속성에 대해 getter와 setter가 생김
-snape 객체의 _subject 속성 값을 보려면 snape._subject를 실행
-_subject에 새 값을 할당하려면 snape._subject="new value"를 실행
// Check the default value
console.log(snape._subject) // Returns "Dark arts"
// Change the value
snape._subject="Balloon animals" // Sets subject to "Balloon animals"
// Check it again and see if it matches the new value
console.log(snape._subject) // Returns "Balloon animals"