Object.prototype.constructor의 [[prototype]] ?
강의에서 설명해 주신
객체(인스턴스) 와, 그것의 생성자 함수, 그리고 객체의 프로토타입 이 3가지의 구조에 대해서는 이해했습니다.
그렇게 되면, 어떤 객체를 프로토타입 체인을 타고 올라가도
결국 Object.prototype 에 도달하게 되는 것이고,
Object.prototype 또한 constructor를 가지고 있을 것입니다.
그렇다면 그 constructor는 함수이므로,
Function.prototype 을 상속 받을 것이고,
Fuction.prototype의 constructor는
역시 함수이므로 Function.prototype을 상속 받게 됩니다.
크롬 개발자 도구에서 객체를 선언하고 console.dir로 타고타고 올라가면 결국 저 Object.prototype.constructor 가 나오는 시점부터 무한하게 트리를 타고 올라가게 되는데
[[prototype]] > constructor > [[prototype]] > constructor > [[prototype]] ....
제가 보기엔 재귀참조형태 같아보이는데 이것이 맞는지 궁금하여 질문 드립니다.
그렇게 되면
Function.prototype.constuctor === Function()
Function().[[prototype]] === Function.prototype
Function.prototype.[[prototype]] === Object.prototype
Object.prototype.constructor === Object()
Object().[[prototype]] === Function.prototype
형태가 되어버리는데 이게 맞는 지 궁금합니다..
무언갈 놓치고 있는 것인지? 아니면 최상위 Object 객체에선 다르게 동작하는 규칙이 있는 것인지 궁금합니다.
Answer 1
0
이건 프로토타입만 그런건 아니에요.
const obj = {}
obj.a = obj이런 식으로 재귀참조를 걸면
console창에서는 무한히 참조가 이어지는 것으로 보이게 됩니다.
그런데 이런 식의 '무한 참조' 구조를 처음부터 만들어놓는 것은 아니에요.
사용자가 접근하려고 할 때 비로소 참조연결이 이뤄지는 식으로 동작합니다.
엔진 입장에서는 처음에는 obj = { a: obj } 로만 알고 있다가
사용자가 obj.a.a 로 접근하려고 할 때,
이를 순차적으로 쪼개어
처음에는 obj.a까지만 접근하여 값(result (obj))을 얻고,
다시 그 값으로부터 result.a에 접근하여 값을 도출합니다.
인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유
0
58
1
setTimeout 에서 this
0
79
1
2강부터 영상이 나오지 않습니다.
0
172
1
자바스크립트 주석에 이상한 점이 있어서 문의드립니다.
0
217
2
return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.
1
258
1
클래스 static 멤버
1
251
1
실행컨텍스트와 스택프레임
2
564
1
프로토타입으로 상속할때 브릿지 사용 이유
0
319
1
호이스팅 관련 질문
1
334
1
책 66p. 예제 3-2 질문입니다.
0
355
1
강의 내용 10:58 캡슐화 질문입니다.
1
396
1
강의 내용 5:10 질문입니다.
1
421
2
전역 공간에서의 this
0
425
2
18:31 addEventListener의 this
1
478
1
outerEnvironmentReference 질문
1
371
1
실행 컨텍스트와 클로저에 대해 질문드립니다.
1
447
1
함수를 값으로 할당할 때
2
456
1
15:54 'ddd' 사라지는 오류?
4
374
1
프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.
1
401
1
기본형/가변형 질문입니당
0
331
0
선생님 그러면 섹션 0만 봐도 무방한가요!?
0
332
1
Hoisting과 environmentRecord에 관한 질문입니다.
1
287
1
안녕하세요, 데이터 변경 질문입니다.
0
321
1
선생님 class 상속파트에서 궁금한게 있습니다.
0
233
1

