[ES6] 화살표 함수 안의 this
2018. 11. 12. 13:52ㆍ모두모두 개발자다요/javascript
ES6 알못이라고 가정할 때, 화살표 함수란?
// Anonymous function (ES5) function (param1, param2, ... paramN) { ... } // Anonymous function (ES6) (param1, param2, ... paramN) => { ... }
(일단 그냥 function () {} 이라고 외우면 좀 편하다..;;)
ES6 타입으로 주름좀 잡아본다고 막 화살표 걸어봤더니 이해 안 되는 다음과 같은 현상이 일어났다!!
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> <button id="btn_arrow_es5">arrow es5</button> <button id="btn_arrow_es6">arrow es6</button> <script type="text/javascript"> // (ES5) $('#btn_arrow_es5').on('click', function () { console.log(this); // 1 }); // 화살표 함수 쓰는 맛 들렸다고 아래와 같이 써봤더니 (ES6) $('#btn_arrow_es6').on('click', () => { console.log(this); // 2 }); </script>
1번에서는 의도한대로 버튼이 찍히지만
2번의 경우는 window 가 찍힘;;
$(JQuerySelector).on(event), 즉 htmlDOMObject.addEventListener(event) 안의 화살표 함수에서의 'this' 는 상위 컨텍스트를 가리킨다고 함..
(모르고 화살표 막 쓰면 안됨;;)
그 외의 화살표 함수 안에서 this 쓰면 꼬이는 경우
- Object 안의 메소드 정의할 때
var obj = { property : '1', method : () => { console.log(this.property ); // '1' 안나옴.. window.property (undefined) 튀어나옴 } } // 이럴 땐 ES6 주름잡지 말고 아래 처럼 써야한다. var obj = { property : '1', method : function () { console.log(this.property ); // '1' 나옴 } } // 또는 축약된 표현식으로 아래와 같이 쓸 수 있다. var obj = { property : '1', method() { console.log(this.property ); // '1' 나옴 } }
- Object.pototype 메소드 정의할 때
function MyCat(name) { this.catName = name; } MyCat.prototype.sayCatName = () => { console.log(this); // 너도 window 찍힘 return this.catName; // 즉, undefined;; }; // 올바른 의도로 this.catName 을 리턴하려면 기존 ES5 식으로 써야한다. MyCat.prototype.sayCatName = function () { return this.catName; };
반응형
'모두모두 개발자다요 > javascript' 카테고리의 다른 글
캔버스 (canvas) 데이터를 이미지로(png) 변환 후 ajax 파일 전송(upload) (1) | 2019.06.04 |
---|---|
javascript 문자열 여러 줄 코딩 (0) | 2018.05.19 |
JQuery Selector - Attribute Contains Selector : 특정 속성 값이 "문자열" 으로 시작 또는 끝 (0) | 2018.01.24 |
JQuery ajax() 네트워크 오류 "ERR_CONNECTION_REFUSED" 핸들링 (0) | 2018.01.17 |
JQuery form serialize 값 변경 (0) | 2017.10.24 |