JavaScript에서 상속은 constructor를 통해 이루어질 수도 있지만, prototype이라는 또 다른 메커니즘을 사용해 상속 기능을 구현할 수 있습니다. prototype은 일종의 “부모의 유전자” 역할을 하여, 자식 객체들이 공통된 속성과 메서드를 공유할 수 있도록 도와줍니다.
prototype이라는 숨겨진 프로퍼티가 생성됩니다.prototype은 해당 constructor로 생성된 모든 인스턴스(자식 객체)들이 공유하는 공간입니다.function 기계() {
this.name = 'Kim';
this.age = 15;
}
var 학생1 = new 기계();
var 학생2 = new 기계();
console.log(기계.prototype);
// 출력 결과: prototype 객체(빈 객체 또는 기본 프로퍼티들이 포함된 객체)
기계 함수를 통해 생성된 모든 객체는 내부적으로 기계.prototype이라는 공간을 가지게 됩니다.function 기계() {
this.name = 'Kim';
this.age = 15;
}
기계.prototype.gender = '남';
var 학생1 = new 기계();
var 학생2 = new 기계();
console.log(학생1.gender); // 출력: '남'
기계.prototype에 gender라는 프로퍼티를 추가하면, 이후 생성된 모든 인스턴스(자식 객체)에서 해당 값을 사용할 수 있습니다.gender를 갖고 있지 않더라도, 상위 프로토타입에 있는 gender를 참조합니다.JavaScript는 객체의 프로퍼티를 찾을 때 다음과 같은 순서로 검사합니다:
이 과정을 통해 자식 객체는 prototype에 저장된 속성과 메서드를 자유롭게 사용할 수 있습니다.
toString(), sort(), push(), map(), forEach() 등 다양한 내장 메서드가 존재합니다.Array.prototype 또는 Object.prototype에 정의되어 있습니다.var arr = [1, 2, 3];
console.log(arr.toString()); // 내장 메서드 사용 가능
console.log(Array.prototype);
// Array의 prototype에는 sort, map, push 등 여러 함수가 정의되어 있습니다.
[]를 사용하여 배열을 만들더라도, 내부적으로는 new Array()로 생성되어 Array의 prototype을 상속받습니다.