October 21, 2019
https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Inheritance
위의 reference, mdn에서 inheritance를 구현하는 방식을 알아보았다.
function Person(first, last, age, gender, interests) {
this.name = {
first,
last
};
this.age = age;
this.gender = gender;
this.interests = interests;
};
Person.prototype.greeting = function() {
alert('Hi! I\'m ' + this.name.first + '.');
};
function Teacher(first, last, age, gender, interests, subject) {
// Person() 상속
Person.call(this, first, last, age, gender, interests);
this.subject = subject;
}
Teacher() 생성자는 Person()의 메소드를 상속받지 못한 상태이다.
Object.getOwnPropertyNames(Person.prototype) // ["constructor", "greeting"]
Object.getOwnPropertyNames(Teacher.prototype) // ["constructor"]
Teacher.prototype.greeting // undefined
그래서 아래와 같은 코드를 추가해준다.
Teacher.prototype = Object.create(Person.prototype);
// Person.prototype 객체를 가지고 있는 새 객체를 생성하여 Teacher.prototype으로 할당
Teacher.prototype.greeting;
/*
ƒ () {
alert('Hi! I\'m ' + this.name.first + '.');
}
*/
Person.prototype에 정의된 모든 메소드를 사용할 수 있게 되었다..!
하지만 Teacher.prototype의 constructor 속성이 Person()으로 되어있으면 문제의 소지가 있어서
고쳐주어야 하므로 아래의 코드를 추가한다.
Teacher.prototype의 constructor 속성이 Person()이 된 이유
Teacher.prototype.constructor = Teacher;
inheritance : 상속
Teacher.prototype.greeting = function() {
alert('hello, world');
};
/*
ƒ () {
alert('hello, world');
}
*/
javascript에서는 OOP 구현을 위해 prototype을 이용해 힘들게, inheritance를 구현한다고 생각했어요.
javascript ES6 문법인 class 에 대해서 알아보시는 방향이 더 좋을 것 같습니다.
라는 말씀을 해주셨다.