자바스크립트 prototype chain
Javascript 2011. 12. 12. 12:53
1. 프로토타입이란?
자바스크립트에서 모든 객체는 prototype에 기반합니다.
프로토타입은 다른 객체의 기반이 되는 객체이고, 새 객체가 가져야 할 맴버를 정의하고
구현 합니다.
객체는 내부 속성을 통해 자신의 프로토타입에 묶입니다. IE를 제외한 표준 브라우져들에서는
__proto__라는 이름으로 노출하여, 개발자가 사용할 수 있지만, [[Scope]]속성과
마찬가지로 코드에서 접근할수 없습니다.
또한 객체의 맴버는 인스턴스 맴버와, 프로토타입 맴버 두가지입니다.
인스턴스 맴버는 객체 인스턴스 자체에 있고, 프로토타입 맴버는 객체의 프로토타입에
있습니다.
1. A 생성자 함수의 Prototype Chain 도식화 예제 입니다.
1. A 생성자 함수는 Function()입니다.
2. A 함수 객체의 Constructor는 Function() 이며, 즉 Function.prototype 맴버를 상속 받고 Function.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다.
3. A.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다.
2. new A 객체가 추가된 Prototype Chain 도식화 예제 입니다.
1. A 생성자 함수는 Function()입니다.
2. A 함수 객체의 Constructor는 Function() 이며, 즉 Function.prototype 맴버를 상속 받고 Function.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다.
3. A.prototype 객체 속성은 Object.prototype 맴버를 상속 받습니다.
4. New A객체의 __proto__ 속성은 A.prototype과 연결됩니다.
아래는 지금 까지의 설명에 대한 예제코드 입니다.
-
function A(){
-
this.name = 'name';
-
}
-
-
-
A.prototype.getName = function(){
-
return this.name;
-
}
-
-
-
alert(A.constructor); // Function()
-
alert(A.prototype.constructor); // A()
-
alert(A.prototype.hasOwnProperty); // Object.hasOwnProperty()
-
alert(Function.prototype.hasOwnProperty); // Object.hasOwnProperty()
-
-
alert(new A().name); // name
-
alert(new A().getName()); // name