객체를 생성하는 방법

  1. 객체 리터럴
const kukucorn = { age : 20 };
const insong = { age : 27 };
  1. 내장 생성자
let kukucorn = new Object(); // 안티패턴 Number, Boolean
kukucorn.age = 20;
  1. 생성자 함수
function Person(age) {
	this.age = age;
}

const kukucorn = new Person(20);
const insong = new Person(19);

객체 리터럴 {...}을 사용하면 객체를 쉽게 만들 수 있고 유효범위 판별 작업도 발생하지 않는다.

유효범위 판별 작업이란? 생성자 함수를 사용했다면, 지역 유효범위에 동일한 이름의 생성자가 있을 수 있기 때문에 생성자 함수를 호출한 위치에서부터 전역까지 인터프리터가 거슬러 올라가며 유효범위를 검색한다.

그러면, 만들기도 쉽고 유효범위 판별 작업도 발생하지 않는 객체 리터럴이 짱인가?

아니다, 유사한 객체를 여러 번 만들어야 할 때가 있을 수 있다. 이 때, 객체 리터럴을 사용하게 되면 비효율적이고 코드의 양이 늘어난다.

이 때, new 연산자와 생성자 함수를 이용하면 유사한 객체를 여러 번 만드는데 용이하다.

생성자 함수

생성자 함수와 일반 함수에 기술적인 차이는 없다.

다만, 관습적으로 생성자 함수의 첫 글자는 대문자로 시작한다.

또한, new 연산자를 함수 앞에 붙여 실행해야지만 생성자 함수로 동작한다.

생성자 함수 동작방식

new 연산자를 사용해서 함수를 실행할 때 내부적으로 어떻게 동작할까?

  1. 빈 객체를 생성한다. {}