-
[JS] 객체(Object) [생성/프로퍼티/인스턴스]Javascript 2023. 4. 20. 00:42

▶ 객체 생성
- 싱글 리터럴 방식
const obj = { property : 'value', method : function() {}, };- 생성자 함수
function NewObj(name) { this.name = name; } const newObject = New NewObj('jeong');- Object.create()
//프로토타입, 객체 서술자(기술자) const newObj2 = Object.create(Object.prototype, { name: { value: "jeong", writeable: true, // 덮어쓸 수 있는지 enumerable: true, // 열거할 수 있는지 configurable: true, // 객체 서술자를 수정할 수 있는지 } });자바스크립트의 모든 객체는 프로토타입을 가지고 있다.
Object.create() 메서드는 지정된 프로토타입 객체 및 속성(property)을 갖는 새 객체를 만들 수 있다.
▶ 프로퍼티 열거
보통 for..in문을 사용한다.
const obj = { prop1: 'value1', prop2: 'value2', prop3: 'value3', prop4: 'value4', prop5: 'value5', }; for (const key in obj) { console.log(obj[key]); };
▶ 프로퍼티 조작
const person = { firstName: 'jeong', location: 'Korea', }; //추가 person.lastName = 'jihye'; //수정 person.lastName = 'ji-hye'; //삭제 delete person.location;
▶ 프로퍼티 접근자(getter / setter)
const person = { _firstName: 'jeong', location: 'Korea', get firstName() { return this._firstName; } set firstName(newFirstName) { this._firstName = newFirstName; } }; console.log(person.firstName); //jeong
▶ 인스턴스
객체가 만들어지기 위해서는 자신을 만드는 데 사용된 원형인 프로토타입 객체를 이용하여 객체를 만든다.
이때 만들어진 객체 안의 __proto__ 속성에 자신을 만들어낸 원형을 의미하는 프로토타입 객체를 참조하는 숨겨진 링크가 있는데, 이 숨겨진 링크를 프로토타입이라고 한다.
프로토타입 기반의 언어는 객체 원형인 프로토타입을 이용하여 새로운 객체를 만들어내고, 이렇게 생성된 객체 역시 또 다른 객체의 원형이 될 수 있다. 이렇게 프로토타입은 객체를 확장하고 객체 지향적인 프로그래밍을 할 수 있게 해 준다.
자동차를 생산하는 공장이 있다고 하자.자동차는 공통적인 원형(속성)이 있다. 자동차 공장에서는 각 자동차에 맞는 공장을 새로 짓는 게 아니라,자동차의 원형이 되는 틀(프로토타입 객체)을 만들어서 각 자동차(객체)마다 원하는 특징을 넣어 차를 만든다.
function Car(name, color, price) { this.name = name; this.color = color; this.price = price; this.getName = function() { return this.name + '을 생산합니다.'; }; } const benz = new Car('벤츠', '흰색', '60000000'); const volvo = new Car('볼보', '검정색', '80000000');비슷한 성질을 가진 여러개의 객체를 만들기 위해, 일종의 설계도라고 할 수 있는 생성자 함수(Constructor)를 만들어 찍어내듯 사용하는데 이렇게 생성된 객체를 인스턴스라 부를 수 있다.
사실 ES2015+ 부터는 class가 등장했기 때문에 생성자 함수는 현재 잘 쓰이진 않는다고 한다.
'Javascript' 카테고리의 다른 글
[JS] 즉시 실행 함수 표현(IIFE, Immediately Invoked Function Expression) (0) 2023.04.20 [JS] 호이스팅(hoisting) (0) 2023.04.20 [JS] 자주 사용하는 배열 내장 함수 (0) 2023.04.20 [JS] 나머지 매개변수(rest parameter) (0) 2023.04.19 [JS] 마우스 움직임을 추적하여 커서를 바꿔보자 (0) 2023.03.27