타쿠꺼

프로토타입, 체이닝 본문

Javascript/Study

프로토타입, 체이닝

kimtaku 2016. 5. 29. 04:20

모든 객체는 생성됨과 동시에 __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