티스토리 뷰

JavaScript

prototype vs __proto__

song 2021. 10. 6. 12:44

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함