프로토타입언어
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 |