constructor(생성자함수)의 객체 프로퍼티
new 키워드를 통해 instance를 생성하면 instance의 프로퍼티인 __propto__가 생성자함수의 prototype을 참조한다. (__proto__는 prototype객체의 프로퍼티를 호출할 때 생략할 수 있다)
메모리 사용의 효율성. 프로토타입에 한 번만 저장하면 모든 인스턴스객체가 사용할 수 있다
constructor.prototype.functionName = function(){...};
으로 함수를 작성해주면 인스턴스가 사용가능하다는 것
instance.__proto__.functionName();
instance.functionName();
같은 함수를 참조하여 호출하지만 함수 바로 앞의 객체가 각각 instance.__proto__와 instance로 차이가 있다. 이는 곧 this가 참조하는 객체가 다르다는 뜻이 된다.
모든 데이터타입은 Object 생성자함수를 통해만들어진다
(primitive type도.. 숫자형은 Number, 문자형은 String 등등)
인스턴스 객체 역시 Object 생성자함수로 만들어지는데, prototype도 예외가 아니다.
이 말은 예를 들어 Array.prototype(.__proto__)이 Object.prototype을 참조한다는 의미
Object.prototype에는 toString(), hasOwnProperty()같은 메서드가 내장되어 있다.
리터럴 객체는 곧바로 Object.prototype을 참조하기에 리터럴 객체만의 메서드를 인스턴스가 사용할 수 없다. (Object.prototype에 선언하면 다른 데이터타입도 사용가능하기에)
그래서 생성자함수에 static으로 선언하였다.
리터럴 객체의 전용 메서드는 Object.freeze()
, Object.assign()
이런 식으로 생성자함수가 맨 앞에 등장하게 된다.