프로토타입이란 의미자체가 원형,원본이란 말
자바스크립트에서 말하는 프로토타입 역시 문법적인 의미에서 벗어나지 않는다.
즉 어떠한 객체가 만들어지기 위해 그 객체의 모태가 되는 녀석을 프로토타입이라고 한다.
Java나 php에서 말하는 class가 바로 자바스크립트의 프로토타입과 동일한 의미일 것이다.
모든 함수 객체의 Constructor는 prototype 이란 프로퍼티를 가지고 있다.
이 prototype 프로퍼티는 객체가 생성될 당시 만들어지는 객체 자신의 원형이될 prototype 객체를 가리킨다.
즉 자신을 만든 원형이 아닌 자신을 통해 만들어질 객체들이 원형으로 사용할 객체를 말한다.
prototype object는 default로 empty Object 를 가리킨다.
객체의 생성 과정에서 모태가 되는 프로토타입과의 연결고리가 이어져 상속관계를 통하여
상위 프로토타입으로 연속해서 이어지는 관계를 프로토타입 체인이라고 한다.
이 연결은 proto 를 따라 올라가게 된다.
var A = function () { };
A.prototype.x = function () {
console.log('hello');
};
var B = new A();
var C = new A();
B.x();
> hello
C.x();
> hello
A.prototype.x = function () {
console.log('world');
};
B.x();
> world
C.x();
> world
위 예제에서 A의 Prototype Object의 x 메소드를 재정의 하였을 때 B,C객체도 그 영향을 받는다는 것을 알 수 있다. 그 이유는 프로토타입 체인에 의한 공유 때문이다.
Object 객체를 이용한 커스텀객체 생성
자바스크립트의 가장 상위개념의 객체는 (Object object)이다.
기본적으로 Object객체를 이용하여 커스텀객체 (Custom object)를 하나 생성할 수 있다.
var obj1 = new Object();
obj1.max = 10;
obj1.min = 5;
또는
var obj2 = {};
obj2.max = 20;
obj2.min = 10;
생성자함수를 이용한 커스템객체 생성
먼저 생성자함수 (Cunstructor Function)를 하나 만들고 이를 통해 커스텀객체를 하나 생성한다.
function TestObject(name) {
this.name = name;
}
var obj3 = new TestObject();
var obj4 = new TestObject("hello");
obj3의 name에는 null이 들어갈 것이고, obj4의 name에는 hello가 들어갈 것이다.