<aside> 💡 new 연산자로 호출하여 객체 생성
</aside>
const person = new Object();
person.name = 'Lee';
person.sayHello = function () {
console.log('Hi! My name is ' + this.name);
};
console.log(person);
person.sayHello();
생성자 함수에 의해 생성된 객체를 인스턴스라 한다.
JS는 Obejct
생성자 함수 외에도 String
Number
Boolean
Function
Array
Date
RegExp
Promise
등 빌트인 생성자 함수 제공
// String 생성자 함수에 의한 String 객체 생성
const strObj = new String('Lee');
console.log(typeof strObj); // object
console.log(strObj); // String {"Lee"}
// Number 생성자 함수에 의한 Number 객체 생성
const numObj = new Number(123);
console.log(typeof numObj); // object
console.log(numObj); // Number {123}
// Boolean 생성자 함수에 의한 Boolean 객체 생성
const boolObj= new Boolean(true);
console.log(typeof boolObj); // object
console.log(boolObj); // Boolean {true}
// Function 생성자 함수에 의한 Function 객체(함수) 생성
const func = new Function('x', 'return x * x');
console.log(typeof func); // function
console.dir(func); // ƒ anonymous(x)
// Array 생성자 함수에 의한 Array 객체(배열) 생성
const arr = new Array(1, 2, 3);
console.log(typeof arr); // object
console.log(arr); // [1, 2, 3]
// RegExp 생성자 함수에 의한 RegExp 객체(정규 표현식) 생성
const regExp = new RegExp(/ab+c/i);
console.log(typeof regExp); // object
console.log(regExp); // /ab+c/i
// Date 생성자 함수에 의한 Date 객체 생성
const date = new Date();
console.log(typeof date); // object
console.log(date); // Mon May 04 2020 08:36:33 GMT+0900 (대한민국 표준시)
Object 생성자 함수를 사용해 객체를 생성하는 방식은 특별한 이유가 없다면 그다지 유용해 보이지 않는다.
<aside> 💡
객체 리터럴로 생성할 경우 직관적이고 간편하지만, 동일한 프로퍼티를 갖는 객체를 여러 개 생성할 경우 매번 같은 프로퍼티를 기술해야 하기 때문에 비효율적이다.
</aside>
const circle1 = {
radius: 5,
getDiameter() {
return 2 * this.radius;
}
}
console.log(circle1.getDiameter()); // 10
const circle2 = {
radius: 10,
getDiameter() {
return 2 * this.radius;
}
}
console.log(circle2.getDiameter()); // 20
circle1과 circle2의 property 구조는 동일하지만, 상태 데이터가 다르다.
값의 변경을 위해 동일한 구조의 객체를 생성해야 하는 단점이 있다.
<aside> 💡 생성자 함수로 생성할 경우 동일한 객체를 여러 개 만들 수 있다.
</aside>
// 생성자 함수
function Circle(radius) {
// 생성자 함수 내부의 this는 생성자 함수가 생성할 인스턴스를 가리킨다.
this.radius = radius;
this.getDiameter = function () {
return 2 * this.radius;
}
}
// 인스턴스 생성
const circle1 = new Circle(5);
const circle2 = new Circle(10);
console.log(circle1.getDiameter()); // 10
console.log(circle2.getDiameter()); // 20
<aside> 💡 this는 객체 자신의 프로퍼티나 메서드를 참조하기 위한 자기 참조 변수다. this바인딩은 함수 호출 방식에 따라 동적으로 결정된다.
</aside>