프로토타입
프로토타입
JavaScript는 클래스라는 개념이 없습니다 그래서 기존의 객체를 복사
하여(cloning) 새로운 객체를 생성하는 프로토타입 기반의 언어입니다
이렇게 생성된 객체 또한 또 다른 객체의 원형
이 될 수 있습니다
그래서 프로토타입
은 객체를 확장
하고 객체 지향적인 프로그래밍
을 할 수 있게 해줍니다
프로토타입은 크게 두가지로 해석됩니다
프로토타입 객체를 참조하는 prototype 속성
과 객체 멤버인 proto 속성이 참조
하는 숨은 링크가 있습니다
이 둘의 차이점을 이해하기 위해서는 JavaScript 함수와 객체의 내부적인 구조를 이해해야 합니다
함수와 객체의 내부 구조
JavaScript에서는 함수를 정의하고 파싱단계에 들어가게되면 내부적으로 수행되는 작업이 있습니다
함수 멤버로 prototype 속성이 있는데요 이 속성은 다른 곳에 생성된 함수이름의 프로토타입 객체를 참조
합니다
프로토타입 객체의 멤버인 constructor 속성은 함수를 참조하는 내부구조를 가집니다
function Person() {}
프로토타입 객체란?
함수를 정의하면 다른 곳에 생성되는 프로토타입 객체는 자신이 다른 객체의 원형이 되는 객체입니다
모든 객체는 프로토타입 객체에 접근할 수 있습니다
또한 프로토타입 객체도 동적으로 런타임에 멤버를 추가할 수 있으며 같은 원형을 복사로 생성된 모든 객체는 추가된 멤버를 사용할 수 있습니다
프로토타입이란?
JavaScript에서 기본 데이터 타입을 제외한 모든 것이 객체입니다
객체가 만들어지기 위해서는 자신을 만드는데 사용된 원형인 포로토타입 객체를 이용하여 객체를 만듭니다
이때 만들어진 객체 안에 __proto__
속성이 자신을 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 숨겨진 링크가 있습니다
이 숨겨진 링크를 프로토타입
이라고 정의합니다