자바스크립트에서는 클래스를 사용하지 않았다.
물론, ES6에서 클래스가 새롭게 생겼지만, 원래는 없었다.
그럼에도 불구하고 자바스크립트는 완전한 객체지향언어이다.
자바스크립트의 모든 것은 객체이고, 객체로서 동작한다.
객체를 만들 수 있어야 하고, 부모 객체를 상속할 수 있어야 한다.
자바스크립트는 prototype기반 객체지향 프로그래밍 언어이다.
지금부터 자바스크립트가 prototype 객체를 이용해 객체 지향 프로그래밍을 하는 방법에 대해 다뤄보겠다.
function Person(name){
this.name = name;
}
//생성자 함수를 이용해 객체를 생성한다. new 키워드를 이용한다.
var sejin = new Person('sejin');
var donghwa = new Person('donghwa');
// 2개의 객체를 생성했다. 2개의 객체에 동시에 메서드를 상속하고 싶다면,
// 이때, prototype 객체를 이용할 수 있다. Person 생성자함수가 prototype 객체를 참조하도록 만들 수 있다.
Person.prototype.tellName = function() {
console.log('제 이름은 ' + this.name + '입니다.');
};
// 생성자 함수를 이용해 생성한 두 객체는 prototype객체를 참조하기 때문에 tellName 메서드를 이용할 수 있다.
//이 특성을 이용해 자바스크립트는 prototype을 이용해 상속을 구현한다.
sejin.tellName(); //'제 이름은 sejin입니다.'
donghwa.tellName(); //'제 이름은 donghwa입니다.'
// 상속된 prototype 객체는 _proto_프로퍼티에 담긴다.
console.log(Person.prototype === sejin._proto_); //true
// 객체의 constructor 프로퍼티는 자신을 생성한 객체를 가리킨다.
console.log(Person.prototype.constructor === Person); //true
// 생성자의 prototype 객체는 그 상위의 prototype 객체를 가르킨다. !!prototype chain!!
// 가장 상위의 객체는 Object객체다. 모든 객체는 Object.prototype 객체를 상속받는다.(참조한다)