오늘은 모던 JavaScript 튜토리얼에서 내장 객체의 프로토타입(https://ko.javascript.info/native-prototypes)에 대해 공부했다. 작성한 질문은 다음과 같다.
빈 객체를 만들어 alert(obj)로 출력하면 "[object Object]"가 나오는 이유는 우선, toString 메서드에서 이 문자열을 생성한다. 객체 생성자 new Object와 객체 리터럴 {}은 같은 뜻이며 생성자 함수의 prototype이 toString을 비롯한 다양한 메서드가 구현되어 있는 대형 객체를 참조하여 "[object Object]" 값을 출력하게 되는 것이다.
배열 [1, 2, 3]을 만든다고 가정하면 new Array()의 디폴트 생성자가 내부에서 동작하여 Array.prototype이 배열 [1, 2, 3]의 프로토타입이 되고 Array.prototype을 통해 배열 메서드를 사용할 수 있다. 또한, Array, Date, Function, Number의 프로토타입은 Object.prototype이다. 왜냐하면, 명세서에서 모든 내장 프로토타입 상속 꼭대기에 Object.prototype이 있어야 한다고 규정하기 때문이다.
모던 프로그래밍에서 네이티브 프로토타입을 변경하는 경우는 폴리필 하는 경우 딱 하나뿐이다.
프로토타입과 프로토타입 상속 챕터를 계속해서 공부하며 JavaScript의 비밀을 파헤친다는 느낌을 받고 있다. 이전 장에서 공부한 생성자 함수의 프로토타입 생성 과정의 연장선으로 배열을 만들었을 때, 생성자 함수가 내부에서 동작하여 내장 객체의 prototype을 얻는다는 점을 알게 되어 내가 사용한 메서드들이 이렇게 동작하는 거였구나 배울 수 있었다.
'TIL' 카테고리의 다른 글
TIL - 20220726 (0) | 2022.07.26 |
---|---|
TIL - 20220725 (0) | 2022.07.25 |
TIL - 20220723 (0) | 2022.07.23 |
TIL - 20220722 (0) | 2022.07.22 |
TIL - 20220721 (0) | 2022.07.21 |