🌝 JS에서 객체를 생성하는 방법에는 여러가지가 있다.
- 중괄호{}를 사용하여 객체를 생성하는 방법
let person = { name: "hs", email: "aaaa@example.com", birth: "0719"
- person은 name, email, birth 프로퍼티를 갖는 객체
- 리터럴 방식으로 객체를 정의할 때는 중괄호{ } 안에 프로퍼티 : 값의 쌍을 입력하고 쉼표(,)로 프로퍼티를 구분
- new 키워드를 이용하여 Object 생성자 함수를 호출하면 비어있는 객체를 얻을 수 있다.
let person = new Object(); console.log(person.name); //undefined console.log(person.email); //undefined console.log(person.birth); //undefined person.name = "hs"; person.email = "asdf@example.com"; person.birth = "0719"; console.log(person.name) // 'hs' console.log(person.email) //"asdf@example.com" console.log(person.birth) // "0719"
- new Object()를 호출하면 비어있는 객체를 생성
- 객체 생성 직후 person 객체에는 name, email, birth 프로퍼티를 갖고 있지 않으므로, new Object()로 비어있는 객체를 생성했으면 프로퍼티를 추가해줘야 한다.
- 생성자 함수를 사용하면 java나 c++의 Class처럼 껍데기를 만들 수 있다.
- 기존 함수에 new 연산자를 붙여서 호출하면, 해당 함수는 생성자 함수로 동작한다.
- 그러나, 함수가 일반적 함수인지, 객체를 만들기 위한 목적의 생성자 함수인지 구분하기 위해, 생성자 함수의 첫 문자는 대문자로 표기하는 것이 관례이다.
function Person(name, email) {
this.name = name;
this.email = email;
}
let person1 = new Person("hs", "abc@example.com");
let person1 = new Person("dm", "def@example.com");
- 리터럴과 Obejct()로 객체를 생성하는 것과 달리, 생성자 함수를 통해 객체를 생성하면 같은 속성을 가진 객체를 여러 개 생성할 수 있다.
- 즉, person1과 person2 객체는 name, email 프로퍼티를 갖게 되며, 이 방식은 클래스를 통해 객체를 생성하는 것과 유사하다.
- 또한 생성자 함수에서 정의한 this는 생성자 함수로 생성된 인스턴스가 된다.
- this는 이 비어있는 객체를 가리키고, 그 객체에 name, email 프로퍼티를 추가한 것이다.
- 생성자 함수에 반환 값이 없으면 비어있는 객체에 새로운 프로퍼티를 추가한 this가 반환된다. (?) 이건 뭔소린지 잘 모루겠다..ㅎ
다음에 프로토타입이랑 인스턴스 공부하고 포스팅하기