티스토리 뷰
function object
javascript에서 function은 객체이다. 아래의 두 줄의 코드는 기능상 동일하다.
function Person(){}
var Person = new Function();
Prototype
앞서 말한 것 처럼 function이 선언될 때 function 객체가 생성된다. 하지만 funciton 객체는 다른 객체와 달리 prototype이라는 객체와 함께 생성된다. 이 두 객체는 서로를 참조한다. (function object은 prototype property로, prototype object은 constructor property로)

- function object의 property
- function object로 생성된 object들의 prototype (__proto__로 참조됨)
- function이 선언될 때 생성되어 function의 property가 된다.
- prototype은 기본적으로 __proto__와 constructor property를 갖는다.
__proto__
javascript에서 모든 객체(function object, prototype object 등)는 __proto__라는 property를 갖는다. __proto__는 link이며 자신을 생성한 function의 prototype 객체를 가르킨다. standard는 Object.getPrototypeOf(obj)이며 이와 동일한 기능을 한다.

- 모든 object의 property
- prototype을 가리키는 link
- Object.getPrototypeOf(obj)랑 동일한 기능인데 표준은 아님
- lookup chain에 사용되는 object, 최종적으로 Object.prototype이 null을 참조함을 확인하면서 종료됨
- instanceOf는 어떤 object의 proto chain에 Func.prototype이 있는지 확인하는 작업
Prototype chaining
어떤 한 객체의 property를 참조할 때 해당 object에 존재하는지 먼저 찾는다. 이 떄 존재하지 않으면 __proto__를 참조하여 prototype객체에서 찾고, 이 객체에서도 존재하지 않으면 다시 이 객체의 __proto__를 참조하여 찾는다. 이 과정을 반복하여 최종적으로는 Object.prototype을 참조하고 종료된다.
'JavaScript' 카테고리의 다른 글
| Execution context, scope chain (0) | 2022.08.01 |
|---|---|
| keys, getOwnPropertyNames, for...in (0) | 2022.08.01 |
| this binding (0) | 2021.11.09 |
| Closure (0) | 2021.11.09 |
| ECMA? (0) | 2021.07.12 |
