java나 python등 객체지향언어에는 Class(클래스)가 존재한다. 클래스를 가지고 상속등의 기능을 구현한다. 여기서 중요한 점은 js도 객체지향언어라는 점이다. 하지만 js에는 클래스라는 개념이 없다. 그렇다면 상속등의 기능은 어떻게 할 수 있을까? 이때 프로토타입을 사용한다. 기존의 객체를 clone하여 새로운 객체를 생성하는 것이다.
프로토타입 상속
사람(person)객체에는 sleep이라는 값이있다. 학생(student)객체에도 sleep이라는 값이 있고 person을 상속한다. 이를 student의 프로토타입은 person이라고 말한다.
아래 아주 간단한 예시를 보자. 3가지 물음표에는 각각 어떤 값이 나올까?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
let person = { sleep: null }; let student = { __proto__: person, sleep: true, study: true, };
alert( student.sleep ); // ? (1)
delete student.sleep;
alert( student.sleep ); // ? (2)
delete person.sleep;
alert( student.sleep ); // ? (3)
답은 아래와 같다.
true
null
undefined
이를 잘 활용하면 효율적인 객체생성이 가능하다. 이를 Class와 비교해보자!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
functionPesrson(name){ this.name = name }
Person.prototype.sleep = functionsleep(){ return`${this.name}는 자는 중`; }