var candyMachine = {
status: {
name: 'node',
count: 5,
},
getCandy(){
this.status.count--;
return this.status.count;
}
};
위 코드의 status과 geCandy를 별도의 변수로 가져오고 싶다면
const getCandy = candyMachine.getCandy
const status = candyMachine.status
이러한 코드를 작성할 것이다. 특히나 객체 리터럴내 속성과 이름이 같은 변수를 만들어 담는다면
이를 한번에 한줄로 손쉽게 가져올 수 있는 문법이 생겼다.
const { status, getCandy } = candyMachine
destructuring이라 불리는 문법인데 c++의 소멸자도 아니고 허헛.
ZeroCho 님의 비구조적 할당이라는 적절한 번역이 마음에 든다.
getCandy()
어쨋든 별도의 변수에 할당받았을 때(비구조적할당이 아니더라도)
getCandy() 로 호출하면 undefined라고 나오는데 도대체 이것은 왜 이런 걸까?
candyMachine.getCandy()
메서드 앞에 .이 찍힌 형태로 메서드를 호출 하면 . 앞의 것을 this로 보게 된다.(즉 candyMachine을 찾게된다.)
getCandy.call(candyMachine)
그냥 getCandy()는 찾을 것을 인식하지 못한다. 정상적으로 수행할 수 없다.
bind나 call, apply처럼 this를 변경해주는 함수를 사용해서 candyMachine을 지정해 줘야만 정상적으로 가능해진다.
비구조적 할당은 객체 뿐만 아니라 배열에도 적용된다.
var array = ['nodejs', {}, 10, true];
var node = array[0];
var obj = array[1];
var bool = array[array.length - 1];
오히려 객체 보다 배열에서 마지막 값을 값을 가져오는 것처럼 배열에서 더 많이 쓰였던것 같다.
const [node, obj, ,bool] = array
이를 한문장으로 아주 간편하게 할 수 있다.
공백으로 두면 건너뛴다. 따라서 10에 해당 하는 부분은 비구조적 할당에서 제외된다.
const [node, obj, ...bool] = array
...변수명으로 하면 나머지 부분을 변수에 통째로 배열형태로 담게 된다. 이를 rest문법이라고 부른다.
콘솔에 bool을 찍어보면 [10, true]라고 나온다.
점점점은 화살표 함수에서의 응용된 예도 있다.
const n = (x, ...y) => console.log(x,y)
n(5, 6, 7, 8, 9, 10, 11)
결과는 5 ▶(6) [6, 7, 8, 9, 10, 11] 이다
출처, 참조: https://www.zerocho.com
'Node.js' 카테고리의 다른 글
ES8(2017)에서의 변화 (0) | 2019.09.30 |
---|---|
ES6(2015)에서의 변화 3 (0) | 2019.09.30 |
ES6(2015)에서의 변화 1 (0) | 2019.09.29 |
Ant Design (0) | 2019.09.28 |
React 적용하기 (0) | 2019.09.28 |
댓글