모든 함수는 prototype을 가지고 객체 생성을 위해 함수를 사용한다 (함수 객체만 가지고 있슴)
__proto__
모든 객체와 함수는 자신의 부모 역할을하는 프로토타입 객체를 가르키는 __proto__
([[Prototype]]를 가지며 상속을 위해 사용된다
프로토타입 객체는 constructor 프로퍼티를 가지는데 이 constructor은 프로퍼티 객체 입장에서 자신이 생성한 객체를 가르킨다
function Person(name, gender) {
this.name = name;
this.gender = gender;
this.sayHello = function(){
console.log('Hi! my name is ' + this.name);
};
}
const foo = new Person('Lee', 'male');
console.log(foo.__proto__ === Person.prototype);
console.log(Person.prototype.__proto__ === Object.prototype);
console.log(Person.prototype.constructor === Person);
console.log(Person.__proto__ === Function.prototype);
console.log(Function.prototype.__proto__ === Object.prototype);
Object.create()를 이용한 프로토타입 체인 상속 방법이다
const Person = function () {
(this.age = 12), (this.gender = "man");
};
Person.prototype.face = function () {
return "hello";
};
const Human = function () {
Person.call(this, per.age);
//constructor 상속
};
Human.prototype = Object.create(Person.prototype);
// Human 하위객체가 Person 상위 객체를 상속받음
const per = new Person();
const hum = new Human();
console.log(hum.age); //12
console.log(hum.face); //hello
ES6에서 추가된 class를 이용하여 코드를 고치면
class Person {
constructor() {
(this.age = 12), (this.gender = "man");
}
}
class Human extends Person {}
//Human 하위 클래스가 Person 상위 클래스를 상속받음
const per = new Person();
const hum = new Human();
console.log(hum.age); //12
console.log(hum.gender); //man