오늘은 모던 JavaScript 튜토리얼에서 프로토타입 메서드와 __proto__가 없는 객체(https://ko.javascript.info/prototype-methods)에 대해서 공부했다. 작성한 질문은 다음과 같다.
__proto__를 사용하면 안 되는 이유는 먼저, 구식이며 사용자가 __proto__를 직접 만들 수 있게 허용하면, 내장 __proto__의 getter, setter 때문에 의도하지 않은 결과가 나올 수 있다. 그 대신 사용할 수 있는 메서드는 다음과 같다.
- Object.create(proto, [descriptors]): [[Prototype]]이 proto인 객체를 만든다. 참조 값은 null일 수 있고, 프로퍼티 설명자를 넘기는 것도 가능하다.
- Object.getPrototypeOf(obj): obj의 [[Prototype]]을 반환한다(__proto__의 getter 역할).
- Object.setPrototypeOf(obj, proto): obj의 [[Prototype]]을 설정한다(__proto__의 setter 역할).
__proto__는 항상 객체이거나 null이어야 한다. 문자열과 같은 값들은 프로토타입이 될 수 없다. 또한, 실수로 __proto__에 의도치 않은 객체를 할당했을 때, 프로토타입이 바뀌는 치명적인 버그가 발생할 수 있고 이런 문제를 예방하려면 객체 대신 맵을 사용하면 된다.
오늘부로 프로토타입과 프로토타입 상속 챕터가 끝나게 됐다. 여태껏 알지 못했던 JavaScript의 내부 동작 과정을 자세하게 알아볼 수 있어서 좋았고 특히 내가 작성했던 객체 리터럴들도 결국 생성자 함수로 동작된다는 사실을 알 수 있어서 좋았다. 모던 JavaScript 튜토리얼 공부를 꾸준히 진행하며 한 번만 보는 것이 아닌 복습도 계속해서 진행해줘야 한다는 사실을 다시금 느낀 챕터였다.
'TIL' 카테고리의 다른 글
TIL - 20220727 (0) | 2022.07.27 |
---|---|
TIL - 20220726 (0) | 2022.07.26 |
TIL - 20220724 (0) | 2022.07.24 |
TIL - 20220723 (0) | 2022.07.23 |
TIL - 20220722 (0) | 2022.07.22 |