Page 28 -
P. 28
Zero.prototype = Object.create(Human.prototype);
Zero.prototype.constructor = Zero; // 상속하는 부분
Zero.prototype.sayName = function() {
alert(this.firstName + ' ' + this.lastName);
};
var oldZero = new Zero('human', 'Zero', 'Cho');
Human.isHuman(oldZero); // true
Human 생성자 함수가 있고, 그 함수를 Zero 생성자 함수가 상속합니다. Zero 생성자 함수를 보면
상속받기 위한 코드가 상당히 난해하다는 것을 알 수 있습니다. Human.apply와 Object.create 부
분이 상속받는 부분입니다.
위 코드를 클래스 기반 코드로 바꿔보겠습니다.
class Human {
constructor(type = 'human') {
this.type = type;
}
static isHuman(human) {
return human instanceof Human;
}
breathe() {
alert('h-a-a-a-m');
}
}
class Zero extends Human {
constructor(type, firstName, lastName) {
super(type);
this.firstName = firstName;
this.lastName = lastName;
}
sayName() {
super.breathe();
alert(`${this.firstName} ${this.lastName}`);
}
}
const newZero = new Zero('human', 'Zero', 'Cho');
Human.isHuman(newZero); // true
74
node_06.indd 74 2020-07-14 오전 11:02:01