inflearn logo
강의

Course

Instructor

Core JavaScript

prototype

Object.prototype.constructor의 [[prototype]] ?

Resolved

657

yus

8 asked

1

강의에서 설명해 주신

객체(인스턴스) 와, 그것의 생성자 함수, 그리고 객체의 프로토타입 이 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 객체에선 다르게 동작하는 규칙이 있는 것인지 궁금합니다.

 

javascript

Answer 1

0

jaenam

이건 프로토타입만 그런건 아니에요.

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