prototype
, constructor
, this
그리고 속성과 메소드**.__proto__**
로 표현하며, 이 연결을 따라 프로토타입 체인을 타고 올라가며 속성과 메소드를 탐색한다.**.__proto__
: 생성자인 prototype 속성에서 파생, `.proto**`으로 객체 인스턴스에 구현한다.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; // --> true
Human.prototype === kimcoding.__proto__; // --> true
Human.prototype.sleep === kimcoding.sleep; //// --> true
//Human 클래스의 인스턴스인 kimcoding은 Human의 prototype을 상속받고 있기 때문이다.
Javascript는 흔히 ‘프로토 기반 언어’라고 불린다. 모든 객체들이 메소드와 속성을 상속받기 위한 템플릿으로써 ‘프로토타입 객체’를 가진다.
프로토타입은 ‘프로토타입 체인’ 이라는 특성을 가지고 있는데 → 이는 상위(부모) 프로토타입 객체의 메소드와 속성을 상송받을 수 있음을 의미한다. 따라서 다른 객체에 정의된 메소드와 속성을 한 객체에서 사용할 수 있다.
__proto__
를 이용하여 프로토타입 체인의 과정을 살펴보자
let div = document.createElement('div');
div.__proto__ //--> HTMLDivElement
div.__proto__.__proto__ //--> HTMLElement
div.__proto__.__proto__.__proto__ //--> Element
div.__proto__.__proto__.__proto__.__proto__ //--> Node
div.__proto__.__proto__.__proto__.__proto__.__proto__ //--> EverTarget
div.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__ //--> Constructor..
div.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__.__proto__ //--> null