[JavaScript]프로토타입

Yeon Jeffrey Seo·2021년 12월 27일
0

JavaScript

목록 보기
3/7
post-custom-banner

프로토타입 상속

자바스크립트의 객체는 [[Prototype]]이라는 숨김 속성을 갖는다. 이 속성은 null이거나 다른 객체에 대한 참조를 한다. 이때 참조하는 대상 객체를 프로토타입이라 한다.
자바스크립트는 object에서 속성을 읽으려 하는데 해당 속성이 없으면 자동으로 프로토타입 객체에서 속성을 찾는다.

const animal = {
  eat: console.log("냠냠"),
};
const rabbit = {
  jump: true,
};

rabbit.prototype = animal;
rabbit.eat;
console.log(rabbit);

간단한 프로토타입 예시

rabbit 객체의 프로토타입은 animal이 되며, "rabbit은 animal 객체를 상속받는다" 라고 표현할 수 있다.
따라서 rabbit 객체 내에서 eat 메서드에 접근할 수 있는데, 이러한 프로퍼티를 '상속 프로퍼티(inherited property)'라고 한다.

프로토타입 체이닝

const animal = {
  eats: true,
  walk() {
    console.log("우당탕탕");
  },
};

const tiger = {
  makeSound() {
    console.log("어흥");
  },
  __proto__: animal,
};

const reflection = {
  isQuick: true,
  __proto__: tiger,
};

reflection.walk();
console.log(reflection.eats);

reflection 객체는 tiger 객체를 프로토타입으로 갖고, tiger 객체는 animal 객체를 프로토타입으로 갖는다. 이렇게 프로토타입이 줄줄이 소세지처럼 이어지는 걸 프로토타입 체이닝이라 한다.
프로토타입 체이닝엔 세 가지 제약 사항이 있다.
1. 순환 참조(circular reference)는 허용되지 않는다.

  • 두 객체가 서로를 프로토타입으로 가질 수 없다.
  1. 프로토타입의 값은 객체나 null만 가능하다.
  2. 객체에는 오직 하나의 프로토타입만 있을 수 있다.

프로토타입은 읽기 전용이다.

프로토 타입은 속성을 읽을 때에만 사용한다. 속성을 추가, 수정, 삭제하는 연산은 객체에 직접 해야 한다.

참고자료

https://ko.javascript.info/prototype-inheritance

profile
The best time to plant a tree was twenty years ago. The second best time is now.
post-custom-banner

0개의 댓글