오브젝트도 어레이처럼 비원시 유형으로 분류된다.
즉, 값이 변수로 바로 할당되는 것이 아닌
변수는 자료를 자료가 있는 메모리의 주소를 참조를 하는 형식으로 표현한다.
아래 코드에서
star와 star2의 최종적인 오브젝트 프로퍼티는 어떻게 될까?
const star = { name: 'Tarzan'} // (1번)
const star2 = star // (2번)
star2['friend'] = star // (3번)
star2['friend']['lover'] = 'jane' // (4번)
// what is star?
// what is star2?
- (1번) star는 {name: 'Tarzan'} 오브젝트의 주소를 참조한다.
- (2번) star2는 star를 할당한다. (즉, 두 주소가 참조하는 오브젝트는 같다.)
- (3번) star2['friend']에 star를 할당한다. (두 오브젝트는 서로를 공유하는 순환구조를 띄게된다.)
- star는 객체 주소를 참조하므로, friend도 결국 같은 오브젝트 주소를 참조한다. - (4번) star2['friend']의 ['lover'] 키에 'jane' 이라는 밸류를 할당한다.
최종적으로는 어떻게 될까?
거창해보이기는 했지만 하나의 오브젝트를 계속 수정한 것이므로 둘은 같다.
console.log("star :", star);
console.log("star2 :",star2);
같은 객체를 참조하는 방식을 알았으니
이번에는 활용법에 대해 한번 알아보자.
아래 예시를 통해 프로미스의 컨셉에 대해 공부해 볼 것이다.
프로미스 오브젝트에는 then이라는 프로퍼티가 있는데
이 then은 원하는 작업이 종료될때까지 프로미스 오브젝트 자체를 계속 반환할 수 있는 기능이다.
프로미스를 배우기전에 오브젝트가 스스로 반환하는 것을 공부해보자.
const prepareStage = {
then: (data) => {
console.log(data);
return prepareStage
}
}
위와 같은 코드를 작성했다.
prepareStage는 오브젝트이며
키로는 then을 가지고 있고
then에 상응하는 value는 펑션이다.
펑션은 data라는 파라미터를 가지고, 받은 파라미터는 console.log를 통해 출력된다.
그리고 다시 prepareStage가 return된다.
이 오브젝트를 통해 3번의 로그 기능을 이용하고 싶다면?
아래와 같이 코드하면 된다.
prepareStage.then('이것을').then('출력').then('해라')
then을 출력할때마다 prepareStage가 재귀되며, 원할때까지 펑션을 계속 사용할 수 있음을 알 수 있다.
'Javascript' 카테고리의 다른 글
(문제) 오브젝트 내 value 중 가장 긴 문자열을 출력하기 (0) | 2022.10.05 |
---|---|
Object Helpers (오브젝트 헬퍼 펑션) (0) | 2022.10.05 |
Object(객체, 오브젝트) 기초 (0) | 2022.10.04 |
DOM이란 무엇인가? (0) | 2022.10.02 |
To Do List 만들기 (localStorage 기능 이용) (0) | 2022.10.01 |