관리 메뉴

FU11M00N

[ JavaScript ] JS prototype, prototype chain 본문

SUA 정보보안/JavaScript

[ JavaScript ] JS prototype, prototype chain

호IT 2021. 2. 4. 19:27

이미지 출처 :        https://www.inflearn.com/course/javascript-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EA%B0%95%EC%A2%8C#

 

생활코딩의 이고잉 님의 강의를 기반으로 개인 공부용으로 정리한 포스팅입니다.

 

 

 


 

 

- prototype

 

 

prototype은 원형정도로 변역되는 객체의 원형입니다.함수는 객체이기때문에 생성자로 사용될 함수도 객체입니다.

 

객체는 프로퍼티를 가질 수 있고 prototype이라는 프로퍼티는 그 용도가 약속되어있는 특수한 프로퍼티입니다.

 

prototype에 저장된 속성들은 생성자를 통해서 객체가 만들어질 때 그 객체에 연결됩니다.

 

 

 

- prototype chain

 

prototype chain 의 개념은 예제를 먼저 보겠습니다.

 

function Ultra(){}
Ultra.prototype.ultraProp = true;
 
function Super(){}
Super.prototype = new Ultra();
 
function Sub(){}
Sub.prototype = new Super();
 
var o = new Sub();
console.log(o.ultraProp);

 

 

 

생성자 Sub를 통해서 만들어진 객체 o가 Ultra의 프로퍼티 ultraProp에 접근 가능합니다.

prototype 체인으로 Sub와 Ultra가 연결되어 있기 때문입니다.

 

내부적으로는 아래와 같은 일이 순차적으로 일어납니다.

 

  1. 객체 o에서 ultraProp를 찾는다.
  2. 없다면 Sub.prototype.ultraProp를 찾는다.
  3. 없다면 Super.prototype.ultraProp를 찾는다.
  4. 없다면 Ultra.prototype.ultraProp를 찾는다.

 

prototype는 객체와 객체를 연결하는 체인의 역할을 하는 것입니다.

 

 

이러한 관계를 prototype chain이라고 부릅니다.

 

 

추가적으로, 

Super.prototype = Ultra.prototype

 

이런식으로 코드를 작성하면 안됩니다. 실행이 된다고 상관없다고 볼수있겠지만.

 

이렇게 Super.prototype의 값을 변경하면 그것이 Ultra.prototype도 영향을 주기 때문입니다.

 

Super.prototype = new Ultra();는 Ultra.prototype의 원형으로 하는 객체가 생성되기 때문에

new Ultra()를 통해서 만들어진 객체에 변화가 생겨도 Ultra.prototype의 객체에는 영향을 주지 않게됩니다.

 

 

SUA 정보보안 멘토링에 참여하고 있습니다.

 

'SUA 정보보안 > JavaScript' 카테고리의 다른 글

[ JavaScript ] JS Object  (0) 2021.02.04
[ JavaScript ] JS 표준 내장 객체  (0) 2021.02.04
[ JavaScript ] JS 상속  (0) 2021.02.04
[ JavaScript ] JS this란?  (0) 2021.02.04
[ JavaScript ] JS 전역객체 window  (0) 2021.02.04
Comments