시스템아 미안해
Chapter 4 - Item 30. prototype, getPrototypeOf, __proto__ 차이를 이해하라 본문
책/Effective JavaScript
Chapter 4 - Item 30. prototype, getPrototypeOf, __proto__ 차이를 이해하라
if else 2025. 8. 10. 18:45자바스크립트에서 상속 구조를 이해하려면 prototype, Object.getPrototypeOf, __proto__의 차이를 정확히 알아야 한다.
겉보기엔 비슷해 보이지만, 용도와 쓰임새가 다르다.
1. prototype - 생성자 함수의 설계도
prototype은 함수(특히 생성자)가 가진 속성이다.
여기에 정의한 메서드와 속성은 해당 생성자로 만든 모든 인스턴스가 공유한다.
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log(`Hi, I'm ${this.name}`);
};
const p = new Person("Alice");
p.sayHello(); // "Hi, I'm Alice"
2. Object.getPrototypeOf() - 인스턴스의 부모 찾기
Object.getPrototypeOf(obj)는 이미 만들어진 객체가 어떤 프로토타입을 참조하는지 반환한다.
const proto = Object.getPrototypeOf(p);
console.log(proto === Person.prototype); // true
3. __proto__ - 옛날 방식의 접근
__proto__는 객체에서 프로토타입을 읽거나 바꾸는 비표준 속성이었다.
ES6에서 명세에 포함됐지만, 성능과 유지보수 문제로 여전히 비권장이다.
console.log(p.__proto__ === Person.prototype); // true
대신 Object.getPrototypeOf와 Object.setPrototypeOf를 사용하는 것이 안전하다.
- 메서드 정의는 prototype에,
- 부모 확인은 Object.getPrototypeOf
- __proto__ 사용은 피하자.
ES6 이후, class 문법은 내부적으로 prototype을 자동 연결한다.
또한, 프로토타입 조작은 Object.create, Object.setPrototypeOf 같은 표준 API를 우선 사용한다.
'책 > Effective JavaScript' 카테고리의 다른 글
| Chapter 4 - Item 32. __proto__를 절대 수정하지 말라 (2) | 2025.08.10 |
|---|---|
| Chapter 4 - Item 31. Object.getPrototypeOf를 __proto__ 대신 사용하라 (0) | 2025.08.10 |
| Chapter 3 - Item 29. 비표준 스택 검사 속성 사용을 피하라 (1) | 2025.08.10 |
| Chapter 3 - Item 28. 함수의 toString() 결과에 의존하지 말라 (1) | 2025.08.10 |
| Chapter 3 - Item 27. 문자열 보다 클로저로 코드 캡슐화하기를 선호하라 (3) | 2025.08.10 |