Jinn
2023. 10. 23. 03:15
객체 생성
1. 객체 리터럴
let person1 = {
name: 'Jin',
age: 25,
toString: function() {
return '{name: ' + this.name + ', age: ' + this.age + '}';
}
};
console.log(`name: ${person1.name}`); // name: Jin
console.log(`age: ${person1.age}`); // age: 25
console.log(person1.toString()); // {name: Jin, age: 25}
2. Object() 생성자
let person2 = new Object(); // let person2 = {};
person2.name = 'Lee';
person2.age = 23;
person2.toString = function() {
return '{name: ' + this.name + ', age: ' + this.age + '}';
}
console.log(`name: ${person2.name}`); // name: Lee
console.log(`age: ${person2.age}`); // age: 23
console.log(person2.toString()); // {name: Lee, age: 23}
3. 사용자 정의 생성자
function Person(name, age) {
this.name = name;
this.age = age;
this.toString = function() {
return '{name: ' + this.name + ', age: ' + this.age + '}';
}
}
let person3 = new Person('Kim', 20);
console.log(`name: ${person3.name}`); // name: Kim
console.log(`age: ${person3.age}`); // age: 20
console.log(person3.toString()); // {name: Kim, age: 20}
prototype
모든 객체는 prototype 객체를 참조함.
객체는 prototype 객체의 프로퍼티를 상속받음.
let person = new Person('Jin', 25);
Person.prototype.hobby = 'walk';
Person.prototype.getHobby = function() {
return this.name + "의 취미는 " + this.hobby + "입니다.";
};
console.log(person.getHobby()); // Jin의 취미는 walk입니다.
constructor
모든 객체는 constructor 프로퍼티를 갖는다. 생성자를 참조함.
객체의 타입을 알 수 있고 객체 생성도 가능함
let person = new Person('Jin', 25);
// constructor는 생성자를 참조함
if(person.constructor === Person) {
console.log("person.constructor === Person"); // person.constructor === Person
}
// constructor를 사용한 객체 생성
let person2 = new person.constructor('Kim', 20); // new Person('Kim', 20);
console.log(person2.toString()); // {name: Kim, age: 20}
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
print() {
console.log(`이름: ${this.name}, 나이: ${this.age}`);
}
}
let people = [
new Person('Jin', 25),
new Person('Lee', 25),
new Person('Kim', 20)
];
for(let person of people) {
person.print();
}
// 이름: Jin, 나이: 25
// 이름: Lee, 나이: 25
// 이름: Kim, 나이: 20