Prototype이란?
- JavaScript는 Prototype 기반 언어로 Prototype을 기반으로 상속을 구현
- 모든 객체는 Prototype 속성을 가지고 있으며, 이 Prototype 속성은 해당 객체의 상위 객체를 가리키고, Prototype 속성을 통해 상위 객체의 메서드와 속성을 상속받아 사용
- 즉, prototype은 생성자 함수에 의해 생성되는 객체들이 공유하는 속성과 메소드를 저장하는 특수한 객체
- Prototype을 이용하면 코드의 재사용성, 메모리 효율, 생산성이 증가
// 1. 프로토타입을 이용하지 않을 때
function KoreanFood1(name) {
this.country = 'Korea';
this.foodName = name;
this.printFood = function () {
console.log(this.country);
console.log(this.foodName);
};
}
const kf1 = new KoreanFood1('치킨');
const kf2 = new KoreanFood1('불고기');

// 2. 프로토타입 이용 할 경우
function KoreanFood2(name) {
this.foodName = name;
}
KoreanFood2.prototype.country = 'Korea';
KoreanFood2.prototype.printFood = function () {
console.log(this.country);
console.log(this.foodName);
};
const kf3 = new KoreanFood2('치킨');
const kf4 = new KoreanFood2('불고기');

프로토타입 체인(Prototype Chain)
- 생성된 객체안에서 부모 객체의 주소값을 가지고 있는 프로토타입 링크(Prototype Link)를 가짐
- 이 프로토타입 링크를 통해, 객체지향의 상속개념과 같이 부모객체의 속성, 메소드를 상속받아 객체를 재생성하게 되는데, 이런 상속관계로 꼬리를 물며 연결 되는 프로토타입을 프로토타입 체인(Prototype chain)이라고 함
