10장. 객체 리터럴
객체란?
- 원시 값을 제외한 나머지값으로, 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조다.
- 객체는 mutable(변경 가능한) 값이다.
- 함수 자체가 객체이기도 하다.
인스턴스
클래스에 의해 생성되어 메모리에 저장된 실체를 말한다.
객체 리터럴
객체를 생성하기 위한 표기법으로써, 중괄호를 사용한다.
객체 리터럴은 값으로 평가되는 식이다. 그렇기에 뒤에 세미콜론(;)을 붙여준다.
var person = {
name: 'Lee',
sayHello: () => {
console.log(`Hello, My name is ${this.name}.`);
},
};
빈 객체 또한 객체다.
var empty = {};
console.log(type of empty); // object
프로퍼티
객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성된다.
var person = {
name: 'Lee',
age: 20,
};
메서드
프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라고 부른다.
즉, 메서드는 객체에 묶여있는 함수를 뜻한다.
var circle = {
radius: 5, // 프로퍼티
getDiameter: () => {
return 2 * this.radius; // this는 circle을 가리킨다.
},
};
console.log(circle.getDiameter()); // 10
프로퍼티 접근
프로퍼티 키가 네이밍 규칙을 준수한 경우 [변수.프로퍼티키]같은 방식으로 접근 가능하다.
var person = {
name: 'Lee',
};
console.log(person.name); // Lee
console.log(person['name']); // Lee
프로퍼티 생성 및 삭제
var person = {
name: 'Lee',
};
// 프로퍼티 동적 생성
person.age = 20;
console.log(person); // {name: "Lee", age: 20}
// 삭제
delete person.age;
console.log(person); // {name: "Lee"}
객체 리터럴의 확장 기능 (ES6)
- 프로퍼티 축약 표현
let x = 1,
y = 2;
// 프로퍼티 축약 표현
const obj = { x, y };
console.log(obj); // {x: 1, x: 2}
- 계산된 프로퍼티 이름
const prefix = 'prop';
let i = 0;
const obj = {
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
[`${prefix}-${++i}`]: i,
};
- 메서드 축약 표현 (메서드의 function 키워드를 생략할 수 있다.)
const obj = {
name: 'Lee',
sayHi() {
console.log('Hi, ' + this.name);
},
};
obj.sayHi(); // Hi Lee