화살표 함수는 this를 새로 바인딩하지 않는다.
기존
var character = {
eq : ['투구', '귀걸이', '손무기', '손방패', '갑옷', '각반', '장갑'] ,
print : function( delay = 1000 ) {
setTimeout( function() {
console.log( this.eq.join(",") )
} , delay )
}
}
character.print()
결과)
Uncaught TypeError: Cannot read property 'join' of undefined
해당 경우 this는 window 객체를 가리킨다.
그렇기 때문에 오류로 Uncaught TypeError: Cannot read property 'join' of undefined가 나온다.
delay는 파라미터 기본 값이다.
(포스팅 참고 : 2019/06/26 - [ES6] - ES6 - 함수 파라미터 기본값(디폴트값) 적용하기 )
화살표 함수 방식
새로운 this영역을 만들지 않는다.
var character = {
eq : ['투구', '귀걸이', '손무기', '손방패', '갑옷', '각반', '장갑'] ,
print : function( delay = 1000 ) {
setTimeout( () => {
console.log( this.eq.join(",") )
} , delay )
}
}
character.print()
결과)
투구,귀걸이,손무기,손방패,갑옷,각반,장갑
화살표 함수 방식 주의점
print 프로퍼티를 화살표 함수로 바꾸면 this는 window객체가 된다.
var character = {
eq : ['투구', '귀걸이', '손무기', '손방패', '갑옷', '각반', '장갑'] ,
print : ( delay = 1000 ) => {
setTimeout( () => {
// this는 window 객체를 가리킴
console.log( this === window ) // true
console.log( this.eq.join(",") )
} , delay )
}
}
character.print()
'프로그래밍 > ES6' 카테고리의 다른 글
ES6 - 객채를 구조 분해해서 필드 값 얻기 (한번에 객체 필드 값 변수에 할당하기) (0) | 2019.06.26 |
---|---|
ES6 - 브라우저에서 바벨(babel)을 통한 트랜스파일링 (0) | 2019.06.26 |
ES6 - 화살표로 함수 만들기 => , function 키워드 없이 함수 만들기 (0) | 2019.06.26 |
ES6 - 함수 파라미터 기본값(디폴트값) 적용하기 (0) | 2019.06.26 |
ES6 - 템플릿 문자열 사용하기 ` (0) | 2019.06.26 |