🔎 객체란?
키와 값으로 구성된 속성의 집합으로, 여러 개의 데이터를 하나로 관리해주는 데이터 형태
객체명[추가할 키] = 추가할 값
delete 객체명[삭제할 키]
const key = "name";
const obj = {
[key]: "minha",
}
for (let key in obj) {
console.log(key, obj[key]);
}
객체명.hasOwnProperty(키)
const obj1 = {
a: 1,
b: 1,
c: 1,
}
const obj2 = {
c: 2,
d: 2,
e: 2,
}
const result1 = { ...obj1, ...obj2 };
const result2 = { ...obj1, ...{ f: 3 }}; // 이것도 가능
this
를 사용할 경우 this
는 해당 객체를 의미한다.const obj = {
number: 1,
getNumber: function() {
console.log(this.number); // 여기서의 this는 obj를 의미함
// console.log(number); // 에러 발생
},
};
obj.getNumber();
🔎 데이터 속성 설명자
객체의 속성에 대한 상세 정보를 정의하는 것으로, Object 객체의
defineProperty
메서드를 사용하여 정보 설정
const userObj = {};
// 보통은 이렇게 속성 추가
userObj.name = "철수";
Object.defineProperty(userObj, "name", {
value: "철수";
writable: true, // 수정 가능
enumerable: true, // 순회 가능
configurable: true, // 설정 변경 가능
});
🔎 접근자 속성 설명자
객체 속성의 값을 직접 저장하지 않고, 접근과 설정을 위한 함수(getter, setter)를 사용해 간접적으로 값에 접근할 수 있도록 함수를 정의하는 것
const userObj = {
firstName: "Ava",
lastName: "Davis",
get fullName() {
return `${this.firstName} ${this.lastName}`;
},
set fullName(name) {
const splitNames = name.split(" ");
this.firstName = splitNames[0];
this.lastName = splitNames[1];
},
};
userObj.fullName = "Noah Wilson";
console.log(userObj.fullName);
const userObj = Object.seal({
firstName: "Ava",
});
userObj.lastName = "Davis" // 불가능
delete userObj.firstName; // 불가능
userObj.firstName = "Noah"; // 가능
const userObj = Object.preventExtensions({
firstName: "Ava",
});
userObj.lastName = "Davis" // 불가능
delete userObj.firstName; // 가능
userObj.firstName = "Noah"; // 가능
const userObj = Object.freeze({
firstName: "Ava",
});
userObj.lastName = "Davis" // 불가능
delete userObj.firstName; // 불가능
userObj.firstName = "Noah"; // 불가능
🔎 메서드 체이닝이란?
객체의 여러 메서드를 연속으로 호출하는 방식
const calculate = {
value: 0,
add: function (num) {
this.value += num;
return this;
},
sub: function (num) {
this.value -= num;
return this;
},
getResult: function () {
return this.value;
},
};
const result = calculate.add(10).sub(5).getResult();
console.log(result);
this
는 나를 호출한 객체를 가르킨다. (화살표 함수 제외)객체명.함수명()
으로 호출된다. 단, 전역 객체 내의 함수는 객체명 생략이 가능하다.function getNumber() {
console.log(this);
}
getNumber();
// global.getNumber() 혹은 window.getNumber()
위의 예시에서 getNumber 함수는 전역 함수로 선언되었다.
따라서 getNumber 내부에서 호출하는 this는 전역 객체를 의미한다.
Node.js 환경에서의 전역 객체는 global
브라우저 환경에서의 전역 객체는 window
const obj = {
number: 1,
getNumber: () => {
console.log(this.number);
},
};
obj.getNumber();
위의 예시에서 this는 obj가 아닌 window(혹은 global)를 의미하며, window 객체에 number라는 변수가 없다면 에러가 발생한다.