Prototype chain 상속과 프로토타입

구남규·2021년 1월 17일
0
post-custom-banner

prototype

모든 함수는 prototype을 가지고 객체 생성을 위해 함수를 사용한다 (함수 객체만 가지고 있슴)

__proto__

모든 객체와 함수는 자신의 부모 역할을하는 프로토타입 객체를 가르키는 __proto__([[Prototype]]를 가지며 상속을 위해 사용된다

constructor

프로토타입 객체는 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()

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
post-custom-banner

0개의 댓글