

new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수
new 연산자와 함께 Object 생성자 함수를 호출하여 빈 객체를 생성하여 반환
// 빈 객체 생성
const person = new Object();
// 프로퍼티 추가
person.name = "Lee";
person.sayHello = function () {
console.log(`Hi: My name is` + this.name);
};
console.log(person);
person.sayHello();
객체는 프로퍼티를 통해 고유의 상태를 표현하고, 메서드를 통해 상태 데이터인 프로퍼티를 참조하고 조작하는 동작을 표현한다.
생성자 함수는 일반 함수와 동일한 방법으로 생성자 함수를 정의하고 new 연산자를 사용해 호출하여 생성자 함수로 동작한다
프로퍼티 구조가 동일한 인스턴스를 생성하기 위한 템플릿으로서 동작하며
하는 역할을 한다.
함수가 일반 함수로 호출되면 함수 객체의 내부 메서드 [[Call]]이 호출되고 new 연산자와 함께 생성자 함수로서 호출되면 내부 메서드 [[Construct]]가 호출됨
callable : 내부 메서드 [[Call]]을 갖는 함수 객체
constructor : 내부 메서드 [[Construct]]를 갖는 함수 객체
non-constructor : [[Construct]]를 갖지 않는 함수 객체
non-constructor 함수 객체를 생성자 함수로서 호출하면 에러 발생
생성자 함수는 주로 파스칼 케이스 사용
Object와 생성자 함수는 new 연산자 없이 호출해도 new 연산자와 함께 호출했을 때와 동일하게 동작한다.
**String, Number, Boolean 생성자 함수는 new 연산자와 함께 호출했을 때 String, Number, Boolean 객체를 생성하여 반환 / new 연산자 없이 호출하면 문자열, 숫자, 불리언 값 반환