{}를 사용해 객체를 생성하는 것이다.const person = {
name : 'John',
age : 30,
city : 'New York'
}; ⇒ 위 코드에서 person이라는 객체는 name, age, city의 세 가지 속성을 가지고 있다.var student = {
// 프로퍼티 키는 name, 프로퍼티 값은 '유관순'
name : '유관순',
// 프로퍼티 키는 age, 프로퍼티 값은 16
age : 16,
// 프로퍼티 나열은 쉼표로 구분하며 마지막 프로퍼티 뒤에 쉼표를 사용해도 된다.
};
console.log(dog.name); // 마침표 표기법(dot notation)
console.log(dog['name']); // 대괄호 표기법(square bracket notation)
var dog = { name : '뽀삐' }
dog.name = '두부'; // 프로퍼티 값 갱신
dog.age = 3; // 프로퍼티 값 추가
delete dog.age; // 프로퍼티 삭제
object.method() 방식으로 호출한다.thisthis 키워드를 이용해 객체의 속성을 정의하고 초기화 한다.this는 이 새로운 객체를 가리킨다.const person = {
name: "홍길동",
sayHello: function() {
console.log("안녕하세요! 저는 " + this.name + "입니다");
}
};
in 연산자console.log('name' in person) // true
console.log('country' in person) // false
for in문var student = {
name : '유관순',
age : 16
};
for (var key in student) {
console.log(`${key} : ${student[key]}`); // name : '유관순', age : 16 출력
}
배열 또는 객체를 분해해 객체 속성을 변수에 쉽게 할당할 수 있는 문법이다.
const person = {
name: '김철수',
age: 25,
city: '서울'
};
const { name, age, city } = person;
console.log(name, age, city); // '김철수' 25 '서울'
함수의 매개변수로도 객체 구조 분해 할당 활용이 가능하다.
객체 복사 : 객체 내부에서의 객체 전개를 의미한다.
const obj = {a: 1, b: 2, c: 3};
const obj2 = {...obj, d: 4};
console.log(obj2); // {a: 1, b: 2, c: 3, d: 4}
obj?.prop 로 표기하며 사용한다.null 혹은 undefined라면 에러 발생 대신 undefined를 반환한다.const person = {
name: '홍길동',
address: {
city: '서울',
country: '한국'
}
}
console.log(person.address?.zipcode);
function Student(name, age) {
this.name = name;
this.age = age;
this.getInfo = function () {
return `${this.name}(은)는 ${this.age}세입니다.`;
};
}
const student = new Student("장보고", 30); // 인스턴스의 생성
console.log(student.getInfo()); // 메서드 호출
프로토타입 기반의 상속const user = {
activate: true,
login: function () {
console.log("로그인 되었습니다.");
},
};
const student = { passion: true };
student.__proto__ = user;
console.log(student.activate); // 프로퍼티 activate를 student에서도 사용 가능
student.login(); // 메소드 login도 student를 통해 호출 가능
console.log(student.passion);
const greedyStudent = { class: 11, __proto__: student };
console.log(greedyStudent.activate); // user에서 상속
console.log(greedyStudent.passion); // student에서 상속
const user = {
id: "user",
login: function () {
console.log(`${this.id}님 로그인 되었습니다.`);
},
};
const student = { __proto__: user };
student.id = "user01";
student.login(); // user01님 로그인 되었습니다.
for (let prop in student) {
console.log(prop);
let isOwn = student.hasOwnProperty(prop);
if (isOwn) {
console.log(`객체 자신의 프로퍼티 ${prop}`);
} else {
console.log(`상속 프로퍼티 ${prop}`);
}
}
const user = {
activate: true,
login: function () {
console.log("로그인 되었습니다.");
},
};
function Student(name) {
this.name = name;
}
// 여기서의 prototype은 일반적인 프로퍼티
Student.prototype = user;// student.__proto__ == user
let student = new Student("홍길동");
console.log(student.activate);
function Student() {}
// 함수를 만들기만 해도 디폴트 프로퍼티인 prototype이 설정
// Student.prototype = { constructor: Student }
console.log(Student.prototype.constructor == Student);
let student = new Student(); // {constructor: Student}을 상속받음
console.log(student.constructor == Student); // true ([[Prototype]]을 거쳐 접근함)