본문 바로가기
Frontend

JS 프로토타입

by yongmin.Lee 2020. 11. 7.

프로토타입언어

JavaScript는 클래스라는 개념이 없고 기존의 객체를 복사하여(cloning) 새로운 객체를 생성하는 프로토타입 기반의 언어이다.

프로토타입 기반 언어는 객체 원형인 프로토타입을 이용하여 새로운 객체를 만들어내는데 이렇게 생성된 객체 역시 또 다른 객체의 원형이 될 수 있다.

자바스크립트 함수

- 자바스크립트에서 함수를 정의하면 내부에 prototype 이라는 프로퍼티가 존재한다. prototype프로퍼티는 프로토타입객체를  참조하고 있다. 

- 정의한 함수를  생성자함수로써 new라는 연산자와 함께 사용하여 인스턴스를 생성할 경우 prototype프로퍼티가 참조하고 있는 프로토타입객체는 생성된 모든 인스턴스의 원형이 된다.

- 이렇게 생성된 인스턴스에는 __proto__라는 프로퍼티가 있는데 프로토타입 객체를 참조하고 있다. 이때 __proto__ 프로퍼티는 생략 가능하도록 구현되어 있으므로 생성자 함수의 prototype에 어떤 메서드나 프로퍼티가 있다면 인스턴스에서도 마치 자신의 메서드나 프로퍼티인것처럼 접근하여 사용 가능하다.

프로토타입객체

- 함수를 정의하면 다른 곳에 생성되는 프로토타입 객체는 자신이 다른 인스턴스의 원형이 되는 객체이다.

- 프로포터입 객체에는 constructor라는 프로퍼티가 있는데, 이는 다시 생성자 함수 자신을 가리킨다. 이 프로퍼티는 인스턴스가 자신의 생성자 함수가 무엇인지를 알고잘 할 때 필요한 수단으로 쓰인다.

프로토타입

(좌)프로토타입 (우)프로토타입체인

- 자바스크립트에서 기본 데이터 타입을 제외한 모든 것이 객체이다. 따라서 인스턴스가 만들어지기 위해서는 자신을 만드는 데 사용된 원형인 프로토타입 객체를 이용하여 인스턴스를 만든다. 이때 만들어진 인스턴스 안에 __proto__ 속성이 자신을 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 숨겨진 링크 프로토타입이라고 정의.

- 자바스크립트에서 숨겨진 링크가 있어 프로토타입 객체 멤버에 접근할 수 있습니다. 그래서 이 프로토타입 링크를 사용자가 정의한 객체에 링크가 참조되도록 설정하면 코드의 재사용과 객체 지향적인 프로그래밍을 할 수 있습니다

 

 

 

'Frontend' 카테고리의 다른 글

Webpack  (0) 2020.12.10
var, let, const 차이  (0) 2020.11.08
JS 클로저  (0) 2020.11.07
JS this  (0) 2020.11.07
JS 실행 컨텍스트  (0) 2020.11.07