Programming/JavaScript

[JavaScript] javascript.prototype 프로토타입 객체

OriginMaster 2022. 2. 7. 22:34
반응형

자바스크립트는 프로토타입 기반 언어라고 불린다. 그만큼 자바스크립트에서 프로토타입은 중요하다.

 

Prototype vs Class

객체지향 언어에서 가장 중요한 개념인 클래스(Class)는 보편적으로 잘 알려져있다.

자바스크립트 또한 객체지향 언어이다. 그러나 여기서 중요한 점은.... 자바스크립트에는 클래스라는 개념 대신

'프로토타입' 이라는 것이 존재한다는 것이다. 그렇기 때문에 자바스크립트가 프로토타입 기반 언어라고 불리기도 한다.

 

자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있다. 그리고 이것은 마치 객체 지향의 상속 개념과 같이 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있게 한다. 이러한 부모 객체를 Prototype(프로토타입) 객체 또는 줄여서 Prototype(프로토타입)이라 한다.

 

var student = {
  name: 'Lee',
  score: 90
};

// student에는 hasOwnProperty 메소드가 없지만 아래 구문은 동작한다.
console.log(student.hasOwnProperty('name')); // true

console.dir(student);

 

ECMAScript spec에서는 자바스크립트의 모든 객체는 [[Prototype]]이라는 인터널 슬롯(internal slot)를 가진다. [[Prototype]]의 값은 null 또는 객체이며 상속을 구현하는데 사용된다. [[Prototype]] 객체의 데이터 프로퍼티는 get 액세스를 위해 상속되어 자식 객체의 프로퍼티처럼 사용할 수 있다. 하지만 set 액세스는 허용되지 않는다고 한다.

 

[[Prototype]]의 값은 Prototype(프로토타입) 객체이며 __proto__ accessor property로 접근할 수 있다. __proto__ 프로퍼티에 접근하면 내부적으로 Object.getPrototypeOf가 호출되어 프로토타입 객체를 반환한다.

student 객체는 __proto__ 프로퍼티로 자신의 부모 객체(프로토타입 객체)인 Object.prototype을 가리키고 있다.

 

var student = {
  name: 'Lee',
  score: 90
}
console.log(student.__proto__ === Object.prototype); // true

 

반응형