2019. 7. 29. 17:05ㆍjavascript
Prototype은 PrototypeLink와 PrototypeObject를 통틀어 부르는 말이다.
Prototype Object
객체는 언제나 함수로 생성된다.
function Car() {} // => 함수 생성
var carObject = new Car(); // => 함수로 객체를 생성
carObject 객체는 Car함수로 생성된 것이다. 이처럼 Object와 마찬가지로 Array,Function 모두 함수로 정의되어 있다.
함수가 정의 될때는 해당 함수에 생성자 (constructor) 자격을 부여 하거나 해당 함수의 Prototype Object 생성 및 연결 하는 일 2가지가 동시에 일어 납니다.
1.함수에 생성자 (constructor) 자격을 부여
Constructor 자격이 부여되면 new를 통해 객체를 만들어 낼 수 있게 됩니다.
Cnstructor는 Prototype Object와 같이 생성되었던 함수를 가리키고 있습니다.
2.해당 함수의 Prototype Object 생성 및 연결
함수를 정의하면 함수만 생성되는 것이 아니라 Prototype Object도 같이 생성이 됩니다.
생성된 함수는 prototype이라는 속성을 통해 Prototype Object에 접근할 수 있습니다. Prototype Object는 일반적인 객체와 같으며 기본적인 속성으로 constructor와 __proto__를 가지고 있다. 그리고 Prototype Object는 일반적인 객체이므로 속성을 마음대로 추가/삭제 할 수 있다
Prototype Link
prototype 속성은 함수만 가지고 있지만 __proto__은 다르다.
__proto__속성
- 모든 객체가 빠짐없이 가지고 있는 속성입니다.
- 객체가 생성될 때 조상이었던 함수의 Prototype Object를 가리킵니다.
__proto__속성을 통해 상위 프로토타입과 연결되어있는 형태를 프로토타입 체인(Chain)이라고 한다. 이러한 프로토타입 체인 구조 때문에 모든 객체는 Object의 자식이라고 불리고, Object Prototype Object에 있는 모든 속성을 사용할 수 있다.