고리타분한 개발자
객체 (Objects) - 프로토타입 (Prototype) 본문
Javascript는 클래스 스타일의 상속 모델을 사용하지 않고 프로토타입 스타일의 상속 모델을 사용합니다.
프로토타입 스타일의 상속 모델의 특징중 하나는 프로토타입 체인을 이용해 상속을 구현한다는 점입니다.
위 코드에서 test 객체는 Monkey.prototype과 Animal.prototype을 둘 다 상속받았기 때문에 Monkey에서 정의한 method에 접근할 수 있습니다. 그리고, 프로토타입 체인에 있는 Monkey 인스턴스의 value 프로퍼티도 사용할 수 있습니다. new Animal()을 해도 Monkey인스턴스는 새로 만들어지지 않고 Animal의 prototype에 있는것을 재사용합니다. 그래서, 모든 Animal인스턴스는 같은 value 프로퍼티를 공유합니다.
Animal.prototype = Monkey라고 하는 것은 Monkey의 prototype을 가리키는 것이 아니라 Monkey라는 Function의 prototype을 가리키는 것입니다. 그래서 프로토타입 체인에 Monkey.prototype대신 Function.prototype이 들어가 있기 때문에 method프로퍼티는 찾지 못합니다.
프로퍼티 탐색 (Property Lookup)
객체의 프로퍼티에 접근하려고 하면 Javascript는 해당 이름의 프로퍼티를 찾을 때까지 프로토타입 체인을 거슬러 올라가면서 탐색하게 됩니다.
프로토타입 체인을 끝까지 탐색하였지만 원하는 프로퍼티를 찾지 못하는 경우에는 undefined로 반환합니다
프로토타입 프로퍼티 (The Prototype Property)
프로토타입 프로퍼티는 프로토타입 체인을 만드는 데 사용하고 어떤 값이든 할당할 수 있지만, primitive 값이 할당되면 무시하고 객체를 할당하면 프로토타입 체인이 동적으로 만들어집니다.
License
이 게시글은 JavaScript Garden을 참고하여 작성 되었습니다. (https://github.com/BonsaiDen/JavaScript-Garden)
'JavaScript > Garden' 카테고리의 다른 글
함수 (Function) - this 의 동작원리 (0) | 2017.11.09 |
---|---|
함수 (Function) - 함수 선언과 표현식 (Function Declarations and Expressions) (0) | 2017.11.09 |
객체 (Objects) - for in Loop (0) | 2017.11.09 |
객체 (Objects) - hasOwnProperty (0) | 2017.11.08 |
객체 (Objects) - 객체와 프로퍼티 (Object and Properties) (0) | 2017.11.08 |