몽탁이의 개발일기
prototype 본문
자바스크립트에서 prototype은 아주 중요한 개념입니다.
자바스크립트의 객체지향을 지탱해주는 큰 역할을 해주기 때문입니다.
또 일반적인 객체지향 언어와 구분해주는 중요한 개념이기도 합니다.
prototype은 모든 객체가 가지고 있는 속성입니다.
그리고 이 속성은 자신이 어떤 객체인지에 대한 객체가 들어 있습니다.
function Ultra(){}
Utra.prototype.ultraProp = true;
function Super(){}
Super.prototype = new Ultra();
function Sub(){}
Sub.prototype = new Super();
var o = new Sub();
console.log(o.ultraProp);
위 예제는 해당 객체의 prototype 프로퍼티에 상속하고 싶은 객체를 생성자로 만들어 객체를 넣어주어서
상속을 하도록 되어있습니다. 그래서 Sub객체를 받은 o는 Ultra의 prototype 안에 있는 ultraProp에 접근이 가능합니다.
좀 더 구체적으로 위와 같은일이 가능한 이유는 prototype chaining이 일어나기 때문입니다.
prototype chaining은 해당 객체에서 프로퍼티를 찾을 때 존재하지 않으면 prototype 객체 안에서 해당 프로퍼티를 찾고 또 존재하지 않으면 상위 prototype으로 가 찾게 됩니다.
최종적으로 Object라는 객체까지 올라가 찾아내고 존재 하지않으면 undefine을 출력합니다.
prototype chaining의 쉽게 예를 들면
중간에 Super.prototype.ultraProp = 1 이라고 하게 되면
Ultra의 ultraProp을 출력하는게 아니라 Super의 ultraProp을 출력하게 됩니다.
이것은 프로토타입 체이닝이 하위에서부터 차례되로 상위로 가면서 하나씩 뒤져간다는 것을 의미합니다.