현재 버전

퇴근하고 확인하느라 늦었습니다.말씀은 제가 생각했던 첫번째 생각이 정답이라고 이해해도 될까요?


첫번째 생각

C 생성자 함수를 선언할 때, C의 prototype 객체가 생기고 그것의 주소를 별도의 공간에 저장하고 기억한다. 그리고 C를 사용해 o를 생성하면 별도로 저장된 주소를 o.__proto__에 할당한다. C의 prototype은 null로 재할당 됐으니, C.prototype과 o.__proto__와는 다르다.


이 생각이 정답이라고 생각하기 힘들었던 이유는 다음 두가지가 이해되지않아서 입니다.

function C() {};
C.prototype = null;

var o = new C();

var test1 = Object.getPrototypeOf(o) === C.prototype; // false
var test2 = Object.getPrototypeOf(o) === Object.prototype; // true


1. C.prototype을 null로 할당하는 로직이, C를 사용해서 o를 생성하는 로직보다 먼저 나옵니다. null로 할당되기 전의 C.prototype의 엔드 포인트의 주소를 어떻게 저장하고 있다가 o를 생성할 때 할당할 수 있을까요?

2. C.prototype을 null로 초기화하지 않았다면, C로 생성한 객체는 다음의 결과를 뽑습니다

o.__proto__.__proto__ = Object.prototype

C.prototype이 null로 할당되면서 엔드포인트에 영향이 없었다면, null로 할당한 후에도 위의 결과는 동일하게 나와야합니다. 하지만 위의 결과가 동일하게 나온다면 밑의 결과가 나오는 것이 이해가가지 않습니다.

var test2 = Object.getPrototypeOf(o) === Object.prototype; // true



수정 이력

2020-10-16 21:07:17 에 아래 내용에서 변경 됨 #1

퇴근하고 확인하느라 늦었습니다.말씀은 제가 생각했던 첫번째 생각이 정답이라고 이해해도 될까요?


첫번째 생각

C 생성자 함수를 선언할 때, C의 prototype 객체가 생기고 그것의 주소를 별도의 공간에 저장하고 기억한다. 그리고 C를 사용해 o를 생성하면 별도로 저장된 주소를 o.__proto__에 할당한다. C의 prototype은 null로 재할당 됐으니, C.prototype과 o.__proto__와는 다르다.


이 생각이 정답이라고 생각하기 힘들었던 이유는 다음 두가지가 이해되지않아서 입니다.

1. C.prototype을 null로 할당하는 로직이, C를 사용해서 o를 생성하는 로직보다 먼저 나옵니다. null로 할당되기 전의 C.prototype의 엔드 포인트의 주소를 어떻게 저장하고 있다가 o를 생성할 때 할당할 수 있을까요?

2. C.prototype을 null로 초기화하지 않았다면, C로 생성한 객체는 다음의 결과를 뽑습니다

o.__proto__.__proto__ = Object.prototype

C.prototype이 null로 할당되면서 엔드포인트에 영향이 없었다면, null로 할당한 후에도 위의 결과는 동일하게 나와야합니다. 하지만 위의 결과가 동일하게 나온다면 밑의 결과가 나오는 것이 이해가가지 않습니다.

var test2 = Object.getPrototypeOf(o) === Object.prototype; // true