728x90
const obj = {
    author: "cotist",
    age: 10
}

 

위와 같이 author, age 두 개의 키를 가진 객체가 있고 같은 양식의 객체들이 필요하다면 어떻게 해야할까?

위의 객체를 ctrl+c, ctrl+v를하여 객체명과 키의 값만 바꿔도 되긴 하겠지만 키가 개수가 많아질수록 반복되는 코드가 늘어나고 결국은 레거시처럼 보일 것이다. (레거시처럼 보이는게 아니고 레거시가 맞다.)

// bad example

const obj1 = {
    author: "cotist1",
    age: 10
}

const obj2 = {
    author: "cotist2",
    age: 11
}

const obj3 = {
    author: "cotis3",
    age: 12
}

const obj5 = {
    author: "cotist4",
    age: 13
}
const obj6 = {
    author: "cotist5",
    age: 14
}

const obj7 = {
    author: "cotist6",
    age: 15
}

 

 

 

이를 해결하기 위한 것이 생성자이다.

말 그대로 객체를 생성하는 위한 것.

// 생성자를 활용한 객체 생성

// this 마침표 뒤에 문장이 키, 인자로 받는 값이자 우변의 값이 키의 값이다.
function Constructor(language, score) {
  this.language = language;
  this.score = score;
}

// const에 선언된 변수명이 객체명이다.
const obj1 = new Constructor("javascript", 100);
const obj2 = new Constructor("python", 90);
const obj3 = new Constructor("c", 95);

주석으로도 설명이 되어 있지만..

생성자 선언 시에 키는 "this.키", 키의 값은 인자로 받고 우변으로 놓으면 끝이다.

그리고 생성자를 불러와서(호출) 객체를 생성하고자 하면 위의 예시와 같이 const 객체명을 선언하고 new를 추가로 붙이고 함수 쓰듯이 하면 된다.

 

 

 

혹시 받아야하는 인자(키)의 개수보다 생성자 호출 시 선언한 인자를 적게 두면 어떻게 될까?

선언되지 않은 키의 값은 undefined로 처리가 된다.

 

인자가 더 적게 불러와졌을 경우에 키의 값이 undefined가 아닌 다른 값으로 초기화하고 싶다면 아래와 같이 삼항연산자를 이용하도록 하자

function Constructor(author, age) {
  this.author = author;
  this.age = age === undefined ? "10" : age;
}

const minsoo = new Constructor("cotist");
728x90
복사했습니다!