const goat = { dietType: 'herbivore', makeSound() { console.log('baaa'); }, diet() { console.log(this.dietType); } }; goat.makeSound(); // baaa goat.diet(); // herbivore
-> this
키워드는 호출 객체의 속성에 대한 엑세스를 제공하는 호출객체를 참조
const robot = { model : '1E78V2', energyLevel : 100, provideInfo() { return `I am ${this.model} and my current energy level is ${this.energyLevel}.`} }; console.log(robot.provideInfo()); // I am 1E78V2 and my current energy level is 100.
_
: 속성이름 앞에 밑줄을 붙여 속성을 변경해서는 안됨을 의미!!
: 개체의 내부 속성을 가져오고 반환하는 메소드
const person = { _firstName: 'John', _lastName: 'Doe', get fullName(){ if(this._firstName && this._lastName){ return `${this._firstName} ${this._lastName}`; } else { return 'Missing a first name or a last name.'; } } } // To call the getter method: person.fullName; // 'John Doe'
const robot = { _model: '1E78V2', _energyLevel: 100, get energyLevel(){ if(typeof this._energyLevel === 'number') { return 'My current energy level is ' + this._energyLevel } else { return "System malfunction: cannot retrieve energy level" } } }; console.log(robot.energyLevel);
: 개체 내의 기존 속성 값을 다시 할당하는 메소드
const person = { _age: 37, set age(newAge){ if (typeof newAge === 'number'){ this._age = newAge; } else { console.log('You must assign a number to age'); } } }; person.age = 40; console.log(person._age); // Logs: 40 person.age = '40'; // Logs: You must assign a number to age person._age = 'forty-five' console.log(person._age); // forty-five
const robot = { _model: '1E78V2', _energyLevel: 100, _numOfSensors: 15, set numOfSensors(num){ if(typeof num === 'number' && num >= 0){ this._numOfSensors = num; } else { console.log('Pass in a number that is greater than or equal to 0'); } } }; robot.numOfSensors = 100; console.log(robot.numOfSensors); // undefined
: 객체를 반환
하는 함수,
여러 객체 인스턴스
를 만드는 데 재사용
할 수 있다.
반환되는 객체를 사용자 정의할 수 있는 매개변수
를 가질 수도 있다.
const monsterFactory = (name, age, energySource, catchPhrase) => { return { name: name, age: age, energySource: energySource, scare() { console.log(catchPhrase); } } }; const ghost = monsterFactory('Ghouly', 251, 'ectoplasm', 'BOO!'); ghost.scare(); // 'BOO!'
const robotFactory = (model, mobile) => { return { model : model, mobile : mobile, beep() { console.log('Beep Boop') } } }; const tinCan = robotFactory('P-500', true); tinCan.beep(); // 'Beep Boop'
반복 제거
function robotFactory(model, mobile){ return { model, mobile, beep() { console.log('Beep Boop'); } } } // To check that the property value shorthand technique worked: const newRobot = robotFactory('P-501', false); console.log(newRobot.model); // 'P-501' console.log(newRobot.mobile); // false
{ }
에 객체 할당
const vampire = { name: 'Dracula', residence: 'Transylvania', preferences: { day: 'stay inside', night: 'satisfy appetite' } }; const { residence } = vampire; console.log(residence); // 'Transylvania' const { day } = vampire.preferences; console.log(day); // 'stay inside'
const robot = { model: '1E78V2', energyLevel: 100, functionality: { beep() { console.log('Beep Boop'); }, fireLaser() { console.log('Pew Pew'); }, } }; const { functionality } = robot; functionality.beep(); // Beep Boop
.hasOwnProperty()
, valueOf()
,
Object.assign()
, Object.entries()
, Object.keys()
...
const robot = { model: 'SAL-1000', mobile: true, sentient: false, armor: 'Steel-plated', energyLevel: 75 }; const robotKeys = Object.keys(robot); console.log(robotKeys); // [ 'model', 'mobile', 'sentient', 'armor', 'energyLevel' ] const robotEntries = Object.entries(robot) console.log(robotEntries); // [ [ 'model', 'SAL-1000' ], [ 'mobile', true ], [ 'sentient', false ], [ 'armor', 'Steel-plated' ], [ 'energyLevel', 75 ] ] const newRobot = Object.assign({laserBlaster: true, voiceRecognition: true}, robot); console.log(newRobot); // { laserBlaster: true, voiceRecognition: true, model: 'SAL-1000', mobile: true, sentient: false, armor: 'Steel-plated', energyLevel: 75 }