Prototype

llama·2022년 3월 23일
2

JavaScript

목록 보기
3/11
post-thumbnail

Prototype

JS에서 어떠한 객체가 만들어지기 위해 사용된 객체 원형(모태)을 프로토타입이라고 한다.

  • JS의 모든 객체의 연결의 끝은 Object객체의 Prototype Object다.
  • JS는 실제로 Class가 존재하지 않고, 프로토타입을 이용한 클로닝과 객체 속성을 확장해 나가는 방식을 통하여 새로운 객체를 생성한다.
  • 프로토타입 객체의 확장은 옵저버패턴을 따른다. ( __proto__ )
    => __proto__는 객체 원형에 대한 숨겨진 연결이다.

Prototype Property

모든 함수 객체(생성자 함수)는 prototype이라는 프로퍼티를 가지고 있는데, 이 prototype 프로퍼티가 객체가 생성될 당시 만들어지는 객체 자신의 원형이될 Prototype Object를 가리킨다.

  • 즉, prototype property는 자신을 만든 원형이 아닌 객체 자신을 통해 만들어질 하위 객체들이 생성될때 원형으로 참조할 Prototype Object를 가리키는 것이다.
  • 모든 객체는 생성과 동시에 자기 자신이 생성될 당시의 정보를 취한 Prototype Object라는 새로운 객체를 클로닝하여 만들어낸다. => 위에서 말한 Prototype이 가리키는 객체가 바로 이것이다.
  • prototype property는 함수 객체만 가지고 있기 때문에, 생성자 함수로 확장된 하위 객체나 함수 객체가 아니라면 존재하지 않는다.
    • 위와 같은 이유로 하위 객체에서 some.prototype.some을 한다면 Type Error가 발생한다.

Prototype Object

객체의 생성과 동시에 생성될 당시의 자신의 정보를 가지고 복제한 프로토타입 객체로, 자신을 통해 만들어질 하위 객체들이 원형으로 참조하는 객체이다.

  • 모든 객체의 확장은 객체가 소유한 Prototype Object를 통해 이루어지고, 이 연결의 끝은 Object 객체의 Prototype Object가 된다.

__proto__ 속성을 프로토타입 링크라고 부르며, 모든 객체에 존재하는 레퍼런스 속성으로 객체의 원형을 가리키고 있다.


Prototype Chain

객체의 생성 과정에서 모태가 되는 프로토타입과 연결고리가 이어져 상속관계를 통하여 상위 프로토타입으로 연속해서 이어지는 관계를 프로토타입 체인이라고 하고, 이연결은 __proto__ 를 따라 올라가게 된다.

  • 모든 객체가 최종적으로 Object객체의 Prototype Object에 다다르는 이유이다.
  • 최상위의 Object객체의 Prototype Object에 도달하여도 원하는 속성을 찾지 못하였을때 undefined를 반환하게 된다.
  • 프로토타입 체인으로 상위 객체의 속성과 메서드를 상속?공유? 받는 것이다.
    • A.prototype.some으로 속성이나 메서드를 추가하여 하위 객체에서 속성을 확인할 수 없는것은 정확히 표현하면 공유를 받은것이다. ( A객체가 생성될 당시에 소유하고 있지 않은 메서드나 속성이기 때문이다. )
    • A객체 생성 당시 this.some 등으로 속성이나 메서드의 정의가 포함되어있다면, 하위 객체에서도 속성을 확인할 수 있기 때문에 이 경우에는 상속이 된다.

Reference

http://insanehong.kr/post/javascript-prototype/

profile
요리사에서 프론트엔드 개발자를 준비하는중 입니다.

0개의 댓글