JS에서 Object 는 대부분 기본적으로 내제되어있는 prototype properties 를 내제한다.
그리고 이 Object는 클래스가 가지고 있는 properties를 상속받는다.
예로, hasOwnProperty()는 Object.prototype에 정의되어 있는 메소드로, JS내에서 선언한 object의 대부분에 사용이 가능하다.
function Bird(name) {
this.name = name;
this.numLegs = 2;
};
위와 같이 Bird function을 통해 class 생성함수를 선언하였다고 해보자.
함수는 class 의 생성자처럼 Bird라는 class 에서 인자를 받아 이름을 생성하고, 기본 특성으로 다리 개수를 할당하고 있다.
let duck = new Bird("Donald");
duck.hasOwnProperty("name");
여기서 duck 은 Bird 의 인스턴스로, Bird는 duck이라는 object의 supertype이 되며, Bird는 JS에서 순수 "Object"가 가지는 prototype을 상속받는다.
정리하자면, duck은 Bird의 상속자로 name과 numLegs를 받긴 했지만 우리는 Bird에서 특별한 메소드를 정의하지는 않았다.
하지만
Bird 가 이미 JS에서 Object의 기본 prototype 을 상속받았기 때문에 duck 또한 해당 prototype properties들을 상속받는 것이다. 이것이 프로토타입 체인이다.
그래서 아래와 같이 표현을 해보면
Object.prototype.isPrototypeOf(Bird.prototype);
위는 True를 반환한다.
이제 특정 data를 object로 관리하고 분류할 때, method를 생성해서 prototype으로 사용하거나, object의 하위 object 를 생성하고 분류할때 , 상속특성을 이해하고 supertype(parent object)을 선언하여 prototype을 상속시키는 방식으로 효육적이게 관리 할 수 있게 된다.