프로토 타입 객체(prototype)

모든 객체는 프로토타입 객체에 접근할 수 있다.

Untitled

생성자 함수를 만들었을 때, 함수를 생성함과 동시에 프로토타입 객체가 생성되고 프로토 타입 객체를 통해 여러 객체를 만들어 낼 수 있는 구조

우리가 만든 리터럴 객체는 Object라는 기본 제공되는 함수와 Object의 프로토타입 객체를 통해 만들어졌고 정확하게는 Object의 프로토타입 객체를 상속 받아 만들어진다.(프로토타입 상속)

Untitled

const user2 = {
    activate : false,
    login : function() {
        console.log('로그인 실패되었습니다.');
    }
};
console.log(user2.__proto__);  // [Object : null prototype] {}
// 해당 객체의 프로토 타입 확인

console.log(user2.__proto__.constructor); // [Functuion : Object]
// 해당 객체의 프로토타입 함수 확인

해당 예시에는 user2라는 객체를 생성하기 위해서 과정을 살펴볼 수 있다.

user2라는 객체를 생성하기 위해는 프로토타입 객체가 필요하고 그의 쌍둥이 격인 함수가 필요하다.

결론적으로 user2 객체를 만들기 위해서는 프로토타입 객체(현재는 비어 있는 { } 구조)에서 틀을 생성 후 값을 넣는 형식 → 프로토타입 상속

/* Object의 프로토타입 함수 */
console.log(user2.__proto__.constructor === Object); // true

/* Object의 프로토타입 객체 */
console.log(Object.prototype === user2.__proto__);   // true

결론적으로, user2 객체의 프로토타입과 모든 객체의 조상격인 Object의 프로토타입 객체는 동일하다고 증명할 수 있다. → 둘 다 프로토 타입의 값은 { } 으로 빈 구조임