-
반응형
프로토타입은
원형
이라고 번역 됩니다. 즉 어떠한 것의 본래의 모습, 원래의 모습입니다. 자바스크립트는 이 프로토탑을 이용하여 객체지향을 동작합니다. 그래서 자바스크립트는프로토타입 기반 언어
라고도 불립니다.ECMA6 표준에서는 Class 문법이 추가되었습니다. 하지만 문법이 추가된 것으로 자바스크립트가 클래스 기반으로 바뀌었다는 것은 아닙니다.
자바스크립트의 모든 객체는 자신의 부모 역할을 담당하는 객체와 연결되어 있습니다. 이러한 부모 객체를 Prototype(프로토타입) 객체 또는 줄여서 Prototype(프로토타입)이라 한다. 즉
자기 자신을 생성하기 위해 사용된 객체원형
을프로토타입
이라고 합니다.Prototype? __proto__?
자바스크립트는 Class 기반으로 인스턴스를 생성하지 않습니다. 대신 객체의 원형인
프로토타입
을 이용하여새로운 객체
를 만들어나간다.함수는 객체
function Person(name) { this.name = name; } Person.prototype.say = function(){}
자바스크립트에서
함수는 객체
입니다. 위와 같은 코드를 실행 시켰을 때 자바스크립트는2가지 객체가 생성
됩니다. Person이라는함수 객체
와 이 함수의 원형을 정의한Person Prototype
객체가 생성되는 것입니다. 이 두 객체는 서로 연결되게 됩니다. 즉서로를 참조
하고 있는 형태가 되는 겁니다.Person 객체의 프로퍼티 중 protoype은 Person Protoype를 가리키고 Person Protoype 객체의 constructor 프로퍼티는 Person 객체를 가리키게 됩니다.
var choe = new Person("choe")
이제 인스턴스를 생성해보겠습니다. new 연산자로 생성자를 통해
인스턴스를 생성
하게 되면 choe 객체는 프로퍼티로__proto__
를 가지게 됩니다. 이 proto는 자신의 원형인prototype를 참조
하여 생성됩니다.즉 instance를 만들면 그 instance는 proto로 생성자의 prototype를 갖게 됩니다.. 즉 생성자 함수의 protype과 생성된 instance의 proto는 같은 객체를 참조하는 것 입니다.
간단한 prototype chain
console.log(choe.name); choe.say()
choe 객체안에는 name이라는 프로퍼티가 존재합니다. 그래서 로그를 찍을 시에 정상적으로 호출되는 것을 확인 할 수 있습니다. 하지만
choe 객체
안에는say()라는 메소드는 존재하지 않습니다
, 이때 자바스크립트는__proto__를 타고 Protoype에 접근
을 하게 되는데요. 이러한 현상을prototype chain
이라고 합니다. 위 코드는결국 proto가 참조하고 있는 Person Prototoype를 찾아가 say라는 메소드를 찾아 실행하게 됩니다.__proto__인하여 연결되어 있어 계속하여 접근이 가능
한 것입니다.반응형'코딩' 카테고리의 다른 글
OOP - 캡슐화 (0) 2021.09.27 OOP의 아주 기초적인 설명 with 객체, 메세지 (0) 2021.09.22 자바스크립트의 기본적인 런타임 환경 (0) 2021.09.19 실행 컨텍스트 with Closure - 3 (0) 2021.09.16 실행 컨텍스트 with this - 2 (0) 2021.09.15