자바스크립트의 모든 객체는 프로토타입(prototype)이라는 객체를 가지고 있습니다.
모든 객체는 그들의 프로토타입으로부터 프로퍼티와 메소드를 상속받습니다.
이처럼 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속을 받으며,
이때 상속되는 정보를 제공하는 객체를 프로토타입(prototype)이라고 합니다.
Prototype 객체는 생성자 함수에 의해 생성된 각각의 객체에 공유 프로퍼티를 제공하기 위해 사용한다.
// ex) abc.prototype = '내용'
// 예제
class Human {
constructor(name, age) {
this.name = name;
this.age = age;
}
sleep() {
console.log(`${this.name}은 잠에 들었습니다`);
}
}
let kimcoding = new Human('김코딩', 30);
Human.prototype.constructor === Human;
Human.prototype === kimcoding.__proto__;
Human.prototype.sleep === kimcoding.sleep;
Object.prototype의 __proto__
속성은 접근하고자 하는
객체의 내부 속성인 [[Prototype]](객체 또는 null)
를 노출하는 접근자 속성(getter 및 setter 함수)이다
즉 __proto__
getter 함수는 객체의 내부 [[Prototype]] 값을 노출한다.
객체 리터럴을 사용하여 생성된 객체의 경우 이 값은 Object.prototype
이다
proto와 prototype의 차이
proto는 모든 객체가 가지고있고, 하나의 링크라고 설명이 가능하다
prototype은 함수의 객체만 가지고 있으며, 생성자를 가지는 원형으로 선언할 수 있다