본문 바로가기
내마음대로만들어보자/JS

자바스크립트 생성자 - 객체 인스턴스 생성 & 반환

by 소농민! 2021. 9. 1.
728x90

생성자 함수의 역할은

→ 같은 값과 동작을 공유하는 객체를 여러개 만드는데 있다!

 

예를들어, new String('foo') 와 같이 new 키워드를 사용하면 자바스크립트가 생성자 함수 내에 있는 this의 값을 새로 만들어진 객체로 설정함으로써 생성자 함수는 특수한 동작을 수행하게된다.

 

특수한 동작을 한 생성자 함수는 기본값인 거짓스러운값(null, 0,undefined, 빈문자열 등) 이 아닌 새로 만든 객체(즉, this 값)를 반환한다. 이때 새 객체는 생성자 함수의 인스턴스 라고 부른다.

 

* 예제

 

//Person은 생성자 함수이며, new 키워드와 함께 사용하도록 만들어졌다. 

var Person = function Person(living, age, gender){

/* 아래에서 this는 새롭게 작성된 객체(this = new Object(); 를 뜻한다. */
    this.living = living;
    this.age = age;
    this.gender = gender;
    this.getGender = function(){return this.gender};

/* new 키워드와 함께 생성자 함수를 호출하면 undefinde 대신 this가 반환된다. */
};

//Person 객체의 인스턴스를 만들어 cody에 저장한다. 
var cody = new Person(true, 33, 'male');

 

//cody는 Person()의 객체이자 인스턴스다. 
console.log(typeof cody);   //object가 기록된다
console.log(cody);    // cody가 포함된 속성과 값이 기록된다.
console.log(cody.constructor);  //Person()함수가 기록된다. 

 

사용자 정의 생성자 함수(Person())를 사용해 cody객체를 만들어봤는데

이는 Array() 생성자 함수를 통해 Array()객체를 만드는것과 같은 동작이다.

 

* 예제

 

// Array 객체의 인스턴스를 만들어 myArray에 저장한다.

var myArray = new Array();    // myArray는 Array의 인스턴스다.

console.log(typeof myArray);  // object가 기록된다. 그 이유는 배열은 객체의 한 종류이기떄문에
console.log(myArray);  
console.log(myArray.constructor);