타쿠꺼
프로토타입, 체이닝 본문
모든 객체는 생성됨과 동시에 __proto__프로퍼티를 갖게 되는데, 이는 프로토타입 객체를 가리킨다.
객체의 기본은 Object.prototype이다.
함수의 경우 __proto__는 Function.prototype을, 배열의 경우에는 Array.prototype을 가리킨다. (그 외 Boolean, Number등이 있다)
여기서 Function.prototype, Array.prototype도 객체이므로 결국 이들의 __proto__는 Object.prototype을 가리킨다.
따라서 결국 모든 객체는 Object.prototype으로 귀결되며, Object.prototype만이 __proto__프로퍼티가 없다.
함수를 새로 정의하는 경우, 함수이름.prototype 프로퍼티를 갖게 된다.
그리고 이 함수를 생성자함수로 사용하게 된다면, 생성된 객체는 이 함수의 prototype프로퍼티를 __proto__프로퍼티로 갖게 된다.
즉 함수가 아닌 객체는 prototype프로퍼티를 갖고 있지 않다. 함수가 prototype프로퍼티를 갖고 있다.
여기서 프로토타입 체이닝의 개념이 발생하는데, 어떤 프로퍼티를 호출했을 때
1. 호출된 객체에서 찾는다.
2. 없으면 __proto__에서 찾는다.
3. 없으면 __proto__의 __proto__에서 찾는다.
4. 결국 Object.prototype에도 없으면 오류를 발생시킨다.
이것이 프로토타입 체이닝의 개념이다.
'Javascript > Study' 카테고리의 다른 글
코드의 실행 과정 (0) | 2016.06.01 |
---|---|
동적스코프, 정적스코프 (0) | 2016.06.01 |
난수 만들기 (0) | 2016.05.31 |
생성자 함수 (0) | 2016.05.29 |
this 바인딩 (0) | 2016.05.29 |
Comments