-
Notifications
You must be signed in to change notification settings - Fork 0
Prototype in Javascript
이 프로토타입 기반 프로그래밍은 Class 기반 OOP 언어를 다루던 사람에게는 이해가 잘 안가는 부분 일수도 있다. Class 기반의 언어에서는 Class 안에 기술된 내용을 기반으로 인스턴스를 생성하여 객체를 사용한다. 하지만 자바스크립트는 Class 가 존재하지 않는다. 그래서 자바스크립트에서는 객체의 원형인 프로토타입을 이용한 클로닝(Cloning: 복사)
과 객체특성을 확장해 나가는 방식을 통해 새로운 객체를 생성해 낸다.
- Prototype이라는 용어는 두가지로 나뉜다.
- Prototype Property
- Prototype Link
Prototype Property : Prototype object. 자기 자신을 Clone하는 객체들이 가지게될 속성들 (자기 자신의 복사본???)
Prototype Link : 자기 자신을 만들어낸 객체의 원형
어떠한 객체가 만들어지기 위해 그 객체의 모태가 되는 녀석을 프로토타입이라고 한다. Java나 php에서 말하는 class가 바로 자바스크립트의 프로토타입과 동일한 의미일 것이다.
자바스크립트의 모든 객체는 자신을 생성한 객체 원형에 대한 숨겨진 연결을 갖는다. 이때 자기 자신을 생성하기 위해 사용된 객체원형을 프로토타입이란 한다. 자바스크립트의 모든 객체는 Object 객체의 프로토타입을 기반으로 확장 되었기때문에 이 연결의 끝은 Object 객체의 프로토타입 Object 다.
function A() {};
var B = new A();
모든 함수 객체의 Constructor는 prototype 이란 프로퍼티를 가지고 있다. 이 prototype 프로퍼티는 객체가 생성될 당시 만들어지는 객체 자신의 원형이될 prototype 객체를 가리킨다. 즉 자신을 만든 원형이 아닌 자신을 통해 만들어질 객체들이 원형으로 사용할 객체를 말한다. prototype object는 default로 empty Object 를 가리킨다.
자바스크립트의 모든 객체는 생성과 동시에 자기자신이 생성될 당시의 정보를 취한 Prototype Object 라는 새로운 객체를 Cloning 하여 만들어낸다. 프로토타입이 객체를 만들어내기위한 원형이라면 이 Prototype Object 는 자기 자신의 분신이며 자신을 원형으로 만들어질 다른 객체가 참조할 프로토타입이 된다. 즉 객체 자신을 이용할 다른 객체들이 프로토타입으로 사용할 객체가 Prototype Object 인 것이다. 즉 위에서 언급한 __proto__라는 prototype 에 대한 link는 상위에서 물려받은 객체의 프로토타입에 대한 정보이며 prototype 프로퍼티는 자신을 원형으로 만들어질 새로운 객체들 즉 하위로 물려줄 연결에 대한 속성이다.
//#예제 1.
var A = function () {
this.x = function () {
//do something
};
};
//#예제 2.
// 여기서 A.prototype을 Prototype Object라고 부르는 듯
var A = function () { };
A.prototype.x = function () {
//do something
};
prototype 프로퍼티는 Constructor가 가지는 프로퍼티 이다. 그리고 *함수객체만 이 프로퍼티를 가지고 있다
// 영기 예제
var B = function A(){}
// var B = {} // syntax error
// var B = () => {} // syntax error
var C = new B();
console.log(B.__proto__); // [Function]
console.log(B.prototype); // A {}
console.log(C.prototype); // undefined
Home | Copyright © 2017 - Kang & Hyeon