
[[Prototype]]이 가리키는 링크를 따라 자신의 부모 역할을 하는 프로토타입 객체의 프로퍼티나 메소드를 차례대로 검색한다. 이것을 프로토타입 체인이라 한다.Human의 메서드와 속성을 객체로 구현한다면 다음과 같다.constructor() 메소드는 Human 클래스의 생성자를 의미한다.name, age, gender는 Human 클래스의 속성이다.eat()와 sleep()는 Human 클래스의 메소드이다.class Human {
constructor(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
eat(food) {
this.food = food;
return `${this.name}이(가) ${this.food}를(을) 먹습니다.`
}
sleep() {
return `${this.name}이(가) 잠을 잡니다.`
}
}new 키워드로 객체 인스턴스를 생성할 수 있다.
인스턴스 (kimcoding)는 Human라는 클래스의 고유한 속성과 메소드를 갖는다.
let kimcoding = new Human('김코딩', 30, '남자');
// 속성
console.log(kimcoding.age); // 30
console.log(kimcoding.gender); // 남자
// 메서드
console.log(kimcoding.eat('사과')); // 김코딩이(가) 사과를(을) 먹습니다.
console.log(kimcoding.sleep()); // 김코딩이(가) 잠을 잡니다.

위에서 사람을 나타내는 클래스를 만들었다. Human 클래스는 일반적인 사람이 가질 만한 특성들을 나열하고 있다.
이번에는 Human을 class 문법으로 상속받아 Student 클래스를 만들어보자. 이 작업을 하위 클래스 생성이라고 부른다.
하위 클래스를 만드려면 Javascript에서 extends 키워드를 통해 상속 받을 클래스를 명시하고, super() 키워드를 사용하면 코드를 좀 더 쉽게 구현할 수 있다.
class Student extends Human {
constructor(name, age, gender, grade) {
super(name, age, gender);
// subject and grade are specific to Teacher
this.grade = grade;
}
learn(subject) {
this.subject = subject;
return `${this.name}이(가) ${this.subject}과목을 배웁니다.`
}
}
Student 인스턴스를 생성하면 이제 Student와 Human 양쪽의 메소드와 속성을 사용할 수 있다.
let kimapple = new Student('김사과', 28, '여자', 90);
kimapple.learn('수학'); // '김사과이(가) 수학과목을 배웁니다.'
