new 연산자로 Object 생성자 함수를 호출하면 빈 객체를 생성한다.
const person = new Object();
person.name = 'gunyong';
person.sayHi = function() {
console.log('hi! Im' + this.name);
}
생성자 함수는 new 연산자와 함께 호출하여 객체를 생성하는 함수이다. 이때 생성자 함수(constructor)에 의해 생성된 객체를 인스턴스라고 한다.
직관적이고 편하지만 중복적인 객체가 반복될때 비효율적이다. -> 생성자 함수로 템플릿을 만들어놓고 필요할때 사용 가능.
this
this는 객체 자신의 프로퍼티나 메서드를 참조하기 위해 자기 참조 변수이다. this 가 가리키는 값은 함수 호출 방식에 따라 결정된다.
일반 함수로서 호출 -> 전역 객체
function prac() {
console.log(this);
}
prac();
메서드로서 호출 -> 메서드를 호출한 객체
const obj = {prac};
obj.prac();
생성자 함수로서 호출 -> 생성자 함수가 생성할 인스턴스
const inst = new prac();
// 생성자 함수
function Circle(radius) {
// 인스턴스 초기화
this.radius = radius;
this.practice = function() {
return 2 * this.radius;
}
}
// 인스턴스 생성
const circle1 = new Circle(1);
우리는 생성자 함수를 통해서 템플릿을 만드는 것이다.
그럼 인스턴스는 왜 초기화 하는것일까? 생성자 함수에서 인스턴스를 초기화하면 개체의 초기 상태 또는 속성을 정의해서 각 인스턴스가 고유한 값을 가질 수 있게 해준다. 초기값으로 고정값을 설정해주는 것이다.
new 연산자
일반 함수와 생성자 함수의 차이는 new 연산자와 함께 함수를 호출하면 생성자 함수로 동작하는 것이다. 함수 객체의 내부 메서드 call 이 호출되는 것이 아니고 constuctor 가 호출된다.
const person = {
name : 'Lee',
address "Seoul",
}
console.log('name' in person); // true;
console.log('age' in person) //false;
객체의 모든 프로퍼티를 순회하며 열거하려면 for ... in 사용
배열 돌때 for...of문과 비슷한 성질을 가지고 있지만 in 은 객체를 순회할때 사용한다는 차이점이 있다.
따라서 배열을 돌때는 for / for..of / forEach 문을 사용한다.