현재 버전

이 현상은 호이스팅 같은 선언 타이밍과 무관하고, 두번째 생각(prototype이 null인 생성자로 객체를 생성하면, 일반 Object를 생성한 것으로 인지하고 Object.prototype을 상속받는다)이 맞다는 실험을 한번 해봤습니다.

실험 엔진은 node v10.18.0을 사용했습니다.

function C() {}

C.prototype.funcA = function () {
  return "a";
};

/* o1은 C.prototype을 제대로 상속받는다 */
const o1 = new C();
console.log(typeof o1.funcA); // function

C.prototype = null;

/* o2은 C.prototype을 상속받지 못한다 */
const o2 = new C();
console.log(typeof o2.funcA); // undefined

/* o1과 o2는 서로 다른 __proto__를 상속받고 있다 */
console.log(Object.getPrototypeOf(o1) === Object.getPrototypeOf(o2)); // false

const o3 = {};

/* o3와 o2는 같은 __proto__를 상속받고 있다. */
console.log(Object.getPrototypeOf(o2) === Object.getPrototypeOf(o3)); // true



수정 이력

2020-10-17 01:45:47 에 아래 내용에서 변경 됨 #2

이 현상은 호이스팅 같은 선언 타이밍과 무관하고, 두번째 생각(prototype이 null인 생성자로 객체를 생성하면, 일반 Object를 생성한 것으로 인지하고 Object.prototype을 상속받는다)이 맞다는 실험을 한번 해봤습니다.


function C() {}

C.prototype.funcA = function () {
  return "a";
};

/* o1은 C.prototype을 제대로 상속받는다 */
const o1 = new C();
console.log(typeof o1.funcA); // function

C.prototype = null;

/* o2은 C.prototype을 상속받지 못한다 */
const o2 = new C();
console.log(typeof o2.funcA); // undefined

/* o1과 o2는 서로 다른 __proto__를 상속받고 있다 */
console.log(Object.getPrototypeOf(o1) === Object.getPrototypeOf(o2)); // false

const o3 = {};

/* o3와 o2는 같은 __proto__를 상속받고 있다. */
console.log(Object.getPrototypeOf(o2) === Object.getPrototypeOf(o3)); // true


2020-10-17 01:44:49 에 아래 내용에서 변경 됨 #1

이 현상은 호이스팅 같은 선언 타이밍과 무관하고, 두번째 생각(prototype이 null인 생성자로 객체를 생성하면, 일반 Object를 생성한 것으로 인지하고 Object.prototype을 상속받는다)이 맞다는 실험을 한번 해봤습니다.


function C() {}

C.prototype.funcA = function () {
  return "a";
};

/* o1은 C.prototype을 제대로 상속받는다 */
const o1 = new C();
console.log(typeof o1.funcA); // function

C.prototype = null;

/* o1은 C.prototype을 상속받지 못한다 */
const o2 = new C();
console.log(typeof o2.funcA); // undefined

/* o1과 o2는 서로 다른 __proto__를 상속받고 있다 */
console.log(Object.getPrototypeOf(o1) === Object.getPrototypeOf(o2)); // false

const o3 = {};

/* o3와 o2는 같은 __proto__를 상속받고 있다. */
console.log(Object.getPrototypeOf(o2) === Object.getPrototypeOf(o3)); // true