안녕하세요, Javascript의 기본부터 다시 공부 중인 신입 프론트 개발자입니다.
최근 prototype과 객체 상속에 관해 공부 중인데, 도저히 이해가 가지 않는 부분이 생겨 고수님들께 조언을 구하고자 글을 올리게 됐습니다.
질문1. prototype이 null인 객체는 Object를 상속하는가?
생성자 함수를 사용해 객체를 생성하면 생성자 함수의 prototype을 상속받는 것은 이해하고 있습니다.
function C() {};
var o = new C();
var test1 = Object.getPrototypeOf(o) === C.prototype; // true
var test2 = Object.getPrototypeOf(o) === Object.prototype; // false
허나 생성자 함수의 prototype이 null일 경우 왜 Object의 prototype을 상속 받는지 이해가 가지 않습니다.
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
질문2. for...in 반복문은 Object.prototype에 접근하지 않는가?
for...in 반복문은 객체의 상속된 프로퍼티 또한 자신이 소유한 프로퍼티로 열거하는 것으로 알고 있습니다.
function C() {};
C.prototype.a = function() {
return 'a';
}
C.prototype.b = function() {
return 'b';
}
var o = new C();
for (var key in o) {
console.log(key);
}
// a
// b
하지만 Object의 프로퍼티를 상속받은 경우, for...in 반복문은 Object.prototype에 접근하지 않습니다.
var o = {};
var test1 = Object.getPrototypeOf(o) === Object.prototype; // true
for (var key in o) {
console.log(key);
}
// 아무것도 출력되지 않음
그렇지만, 금기의 방법을 사용해 Object의 prototype에 프로퍼티를 추가하면, 그것은 출력합니다.
Object.prototype.a = function() {
return 'a'
}
var o = {};
for (var key in o) {
console.log(key);
}
// a
MDN 문서에 보면 Object의 prototype 내부에는 많은 프로퍼티들이 존재하던데, 왜 그것에는 접근하지 않는건지 이해가 가지 않습니다.