JavaScript 심화
this·프로토타입·클래스: 객체지향을 ‘자바스크립트 방식’으로
this 바인딩을 제어하는 3종(call/apply/bind), 프로토타입 상속, class 문법을 연결해서 정리합니다.
그림 1. call/apply/bind 한 장 정리
그림 2. 프로토타입과 클래스(상속 구조)
call / apply / bind: this를 내가 원하는 대로
중급에서 가장 자주 ‘체감’되는 포인트 중 하나가 this입니다. 특히 콜백이나 이벤트 핸들러에서 this가 바뀌어 혼란스러울 때가 많습니다.
call/apply: 지금 바로 실행하면서 this를 지정합니다.bind: this가 고정된 새 함수를 반환합니다(나중에 호출).
const user = { name: 'Soo' };
function hello() {
return `Hello, ${this.name}`;
}
console.log(hello.call(user));
팁
이벤트/콜백에서 this가 깨진다면, 우선
이벤트/콜백에서 this가 깨진다면, 우선
bind 또는 화살표 함수 사용 여부를 점검해 보시면 좋습니다.Prototype: 자바스크립트 상속의 뼈대
자바스크립트는 본질적으로 프로토타입 기반 언어입니다. 어떤 객체에서 프로퍼티를 찾지 못하면, 연결된 프로토타입으로 올라가며 찾습니다.
const parent = { say() { return 'hi'; } };
const child = Object.create(parent);
console.log(child.say()); // 'hi'
__proto__는 역사적으로 많이 쓰였지만, 표준 API(Object.getPrototypeOf)를 추천드립니다.- 함수의
prototype과 객체의[[Prototype]]은 구분해서 이해하시면 좋습니다.
Class: 프로토타입을 더 읽기 좋게 쓰는 문법
class는 프로토타입 모델을 버린 것이 아니라, 읽기 좋은 형태로 작성하도록 도와주는 문법입니다. 실무에서는 팀 합의로 class를 선호하는 경우가 많습니다.
class User {
constructor(name) {
this.name = name;
}
sayHi() {
return `안녕하세요, ${this.name}님`;
}
}
class Admin extends User {
constructor(name) {
super(name);
this.role = 'admin';
}
}
정리
프로토타입의 동작 원리를 이해하면 class도 훨씬 자연스럽게 읽히고, 디버깅도 쉬워집니다.
프로토타입의 동작 원리를 이해하면 class도 훨씬 자연스럽게 읽히고, 디버깅도 쉬워집니다.
참고 링크
'Tech Note > 웹-JavaScript' 카테고리의 다른 글
| [심화] 06. Promise·async/await·Generator (0) | 2026.01.04 |
|---|---|
| [심화] 04. Rest/Spread·클로저·타이머 (1) | 2026.01.04 |
| [심화] 03. 배열 메서드·구조 분해 할당 (0) | 2026.01.04 |
| [심화] 02. Symbol·Number·String (0) | 2026.01.04 |
| [심화] 01. 호이스팅·TDZ·생성자 함수 (0) | 2026.01.04 |