프로토타입 객체
자바스크트는 java, C++과 같은 클래스 기반 객체지향 프로그래밍 언어와 다르게 프로토타입 기반 객체지향 프로그래밍 언어.
클래스 기반 객체지향 프로그래밍 언어는 객체 생성 이전에 클래스를 정의하고 이를 통해 객체(인스턴스)를 생성하나,
프로토타입 기반 객체지향 프로그래밍 언어는 클래스 없이도 객체를 생성할 수 있음.
자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결 되어, 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용 가능함.
이러한 부모 객체를 Prototype(프로토타입) 객체라 부름.
ECMAScript spec에서는 자바스크립트의 모든 객체는 자신의 프로토타입을 가르키는 [[Prototype]] 이라는 숨겨진 프로퍼티를 가짐.
크롬, 파이어 폭스에서는 숨겨진 [[Prototype]] 프로퍼티가 __proto__ 프로퍼티로 구현되어 있음.
const Obj1 = { };
console.log(Obj1.__proto__ === Object.prototype); //true
[[Prototype]] 프로퍼티와 prototype 프로퍼티
prototype 프로퍼티는 프토포타입 객체를 가르키는 [[prototype]] 프로퍼티는 서로 모두 프로토타입을 가르키지만 관점에 차이가 있음.
[[Prototype]] 프로퍼티
- 함수를 포함한 모든 객체가 가지고 있는 프로퍼티.
- 객체의 입장에서 부모의 역할을 하는 프로토타입 객체를 가르키며, 함수 객체의 경우 Function.prototype을 가르킴.
prototype 프로퍼티
Constructor 프로퍼티
Prototype chain
const person = {
name: 'june',
age: 20,
}
console.log(person.hasOwnProperty('name')); // true
person은 hasOwnProperty 메소드를 갖고 있지 않지만,
person 객체의 [[Prototype]] 프로퍼티의 부모 역활을 하는 프로토타입 객체(Object.prototype)의 메소드를 호출하였기 때문에 사용 가능함.
참고 : https://poiemaweb.com/
'4. Programming > 4.3 JavaScript' 카테고리의 다른 글
11. This (0) | 2018.08.22 |
---|---|
10. Scope Life-Cycle (0) | 2018.08.15 |
8. 타입 체크 (0) | 2018.07.24 |
7. Function (함수) (0) | 2018.07.15 |
6. Immutability (객체와 변경불가성) (0) | 2018.07.13 |