본문 바로가기
JavaScript

생성자와 프로토타입

by oncerun 2020. 5. 28.
반응형

생성자

 

생성자 함수는 객체를 생성하는 함수입니다. ES6에서는 class를 사용할 수 있지만 ES5에서는 class가 존재하지 않습니다. 

function Shield(selector) {
  this.parent = document.querySelector(selector);
  this.dom = null;
}

함수를 사용하는 방법과 별로 다르지 않는데 차이점은 대문자로 시작한다는 것입니다.

생성자를 바탕으로 객체를 생성할 수 있습니다.

객체를 생성할 때는 new라는 키워드를 사용해서 생성합니다.

 

사람이라는 생성자를 만들어 본다면

function Person(name, age){
this.name = name;
this.age =age;
    	
}

이렇게 만들 수 있습니다.

 

여기서 this라는 키워드는 중요합니다. this라는 키워드를 생략할 경우 전역 객체인 window의 속성으로 적용되므로 this라는 키워드를 써주어야만 합니다.

 

 

프로토타입

prototype은 생성자로 생성된 타입의 공유되는 저장소라고 생각할 수 있습니다.

따라서 prototype객체에 메서드, 변수를 지정하게 되면  생성자로 생성할 경우 동일한 메서드와 변수를 가지고 생성되게 됩니다.

예시를 들어보자면 

function Person(name, age){
this.name = name;
this.age =age;
}

Person.prototype = {
	
    gender : "남",
   
    run : function(){
    console.log("달려요~");
    },
    fastRun : function(){
    console.log("빨리 달려요~");
    }
}

var a = new Person("d",2);
var b = new Person("f",3);

a.gender = "여";

변수 a , b 는 기본적인 속성으로 gender를 key값으로 가지고 있으며 value값으로 "남"이라는 값이 들어가 있습니다.

 

원하는 객체의 gender값을 변경해주기위해서  a.gender ="여"; 로 변경해줄 수 있습니다.

 

이렇게 사용한다면 메모리사용에 큰 장점이 존재합니다. 그 이유는 만약 생성자의 함수를 선언하게 되면 자바스크립트에서는 함수 또한 객체이므로 객체가 생성될 때마다 함수가 생성됩니다. 하지만 프로토타입을 이용하게 되면 한 번만 생성이 되므로 메모리 사용에 이점을 얻을 수 있습니다.

반응형

'JavaScript' 카테고리의 다른 글

[ES8] async, await  (0) 2020.07.03
[ES6] Promise  (0) 2020.07.02
JSON  (0) 2020.05.27
Javascript(3)  (0) 2020.05.26
JavaScript (2)  (0) 2020.05.13

댓글