-
prototype - 객체지향 | 생활코딩Javascript/ECMAScript 2009 (ES5) 2020. 2. 9. 22:03반응형
[출처 : https://opentutorials.org]
Prototype
prototype이란 무엇인가? 한국어로는 원형정도로 번역되는 prototype은 말 그대로 객체의 원형이라고 할 수 있다. 함수는 객체다. 그러므로 생성자로 사용될 함수도 객체다. 객체는 프로퍼티를 가질 수 있는데 prototype이라는 프로퍼티는 그 용도가 약속되어 있는 특수한 프로퍼티다. prototype에 저장된 속성들은 생성자를 통해서 객체가 만들어질 때 그 객체에 연결된다.
function Ultra(){}; Ultra.prototype.ultraProp = true; function Super(){}; Super.prototype = new Ultra(); function Sub(){}; Sub.prototype = new Super(); var object = new Sub(); console.log(object.ultraProp); // true
생성자 Sub를 통해서 만들어진 객체 object가 Ultra의 프로퍼티 ultraProp에 접근 가능한 것은 prototype 체인으로 Sub와 Ultra가 연결되어 있기 때문이다. 내부적으로는 아래와 같은 일이 일어난다.
1. 객체 object에서 ultraProp를 찾는다.
2. 없다면 Sub.prototype.ultraProp를 찾는다.
3. 없다면 Super.prototype.ultraProp를 찾는다.
4.없다면 Ultra.prototype.ultraProp를 찾는다.
prototype는 객체와 객체를 연결하는 체인의 역할을 하는 것이다. 이러한 관계를 prototype chain이라고 한다.
※ Prototype Chain
특정 객체의 메서드나 프로퍼티에 접근하고자할 때, 해당 객체에 접근하려고 하는 프로퍼티나 객체가 없다면 프로토타입 링크([[Prototype]] 프로퍼티)를 따라 자신의 부모 역할을 하는 프로토타입 객체를 차례로 검색한다.
더보기Super.prototype = Ultra.prototype 으로 하면 안된다. Super.prototype의 값을 변경하면 Ultra.prototype도 변경되기 때문이다.
Super.prototype = new Ultra();는 Ultra.prototype의 원형으로 하는 객체가 생성되기 때문에 new Ultra()를 통해서 만들어진 객체에 변화가 생겨도 Ultra.prototype의 객체에는 영향을 주지 않는다.반응형'Javascript > ECMAScript 2009 (ES5)' 카테고리의 다른 글
Object - 객체지향 | 생활코딩 (0) 2020.02.11 표준 내장 객체의 확장 - 객체지향 | 생활코딩 (0) 2020.02.10 상속 - 객체지향 | 생활코딩 (0) 2020.02.09 this - 객체지향 | 생활코딩 (0) 2020.02.09 전역객체 - 객체지향 | 생활코딩 (0) 2020.02.08