자바스크립트는 프로토타입 기반 언어이다.
클래스 기반 언어에서는 '상속'을 사용하지만 프로토타입 기반 언어에서는 어떤 객체를 원형(원래 형태)으로 삼고 이를 복제(참조)함으로써 상속과 비슷한 효과를 얻는다.
var instance = new Constructor();
어떤 생성자 함수(new)를 new 키워드와 함께 호출하면
생성자 함수에서 정의된 내용을 바탕으로 새 인스턴스(instance)가 생성된다.
이때 인스턴스에서는 __proto__라는 프로퍼티가 자동으로 부여되는데,
__proto__는 Contructor.prototype라는 프로퍼티를 참조한다.
01 var Person = function(name) { 02 this._name = name; 03 }; 04 Person.prototype.getName = function() { 05 return this._name; 06 }; 07 08 var suzi = new Person('Suzi', 28); 09 suzi.getName(); // Suzi 10 var iu = new Person('Jieun', 28); 11 iu.getName(); // Jieun
__proto__는 생략 가능한 프로퍼티이다. 때문에 생성자 함수의 prototype에 어떤 메서드나 프로퍼티가 있다면 인스턴스에서도 마치 자신의 것처럼 해당 메서드나 프로퍼티에 접근할 수 있다.
=> new 연산자로 Constructor를 호출하면 instance가 만들어지는데, 이 instance의 생략 가능한 프로퍼티인 proto는 Constructor의 prototype을 참조한다.