Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 에러 처리
- Ref로 DOM 다루기
- 브라우저의 렌더링 과정
- rest api
- 배열
- Set과 Map
- 싸피
- Ref로 값 참조하기
- Escape Hatches
- ES6 함수의 추가 기능
- 이터러블
- js
- 스프레드 문법
- 표현식과 문
- Strict Mode
- REACT
- 개발 환경 구축
- 모듈
- 비동기 프로그래밍
- BETA
- 클로저
- 프로미스
- 코어JS
- 제너레이터
- DEEPDIVE
- Deep Dive
- await
- 데이터 타입
- 디스트럭처링 할당
- async
Archives
- Today
- Total
코딩을 쉽게 해보자
this란? 본문
this란 말 그대로 "이것"이라고 말할 수 있다.
대부분의 경우, this의 값은 함수를 호출하는 방법에 의해 결정된다.
브라우저에서는 window, 서버 Node.js에서는 global이라는 전역 객체를 가지고 있다.
함수가 어떻게 호출되었는지를 신경쓰지 않고 설정할 수 있는 bind 메소드가 있다.
일반 함수의 this는 window를 가르키고
화살표 함수의 this는 상위 스코프의 this를 가르킵니다.
함수의 호출하는 방식은 여러 가지가 있다.
1. 함수 호출
함수호출에서 기본적으로 this는 전역객체에 바인딩된다.
바인딩 : 메서드와 객체를 묶어놓은 것, 특정 객체에서 실행되게끔한 것
내부함수는 일반 함수, 메소드, 콜백함수 어디에서 선언되었든지 관계없이 this는 전역객체를 바인딩한다.
내부함수의 this가 전역객체를 참조하는 것을 회피하는 방법은
1. 변수에 this를 바인딩하거나
2. this를 명시적으로 바인딩할 수 있는 apply, call, bind 메소드를 사용하는 것이다.
var value = 1;
var obj = {
value: 100,
foo: function() {
var that = this; // Workaround : this === obj
console.log("foo's this: ", this); // obj
console.log("foo's this.value: ", this.value); // 100
function bar() {
console.log("bar's this: ", this); // window
console.log("bar's this.value: ", this.value); // 1
console.log("bar's that: ", that); // obj
console.log("bar's that.value: ", that.value); // 100
}
bar();
}
};
obj.foo();
var value = 1;
var obj = {
value: 100,
foo: function() {
console.log("foo's this: ", this); // obj
console.log("foo's this.value: ", this.value); // 100
function bar(a, b) {
console.log("bar's this: ", this); // obj
console.log("bar's this.value: ", this.value); // 100
console.log("bar's arguments: ", arguments);
}
bar.apply(obj, [1, 2]);
bar.call(obj, 1, 2);
bar.bind(obj)(1, 2);
}
};
obj.foo();
2. 메소드 호출
해당 메소드를 소유한 객체, 즉 해당 메소드를 호출한 객체에 바인딩 된다.
3. 생성자 함수 호출
생성자 함수 내부에서의 this는 인스턴스 자신이 된다.
var Cat = function (name, age) {
this.bark = '애용'
this.name = name
this.age = age
}
var choco = new Cat('초코', 7)
var nabi = new Cat('나비', 5)
console.log(choco, nabi)
// Cat { bark: '애용', name: '초코', age: 7 }
// Cat { bark: '애용', name: '나비', age: 5 }
'JavaScript' 카테고리의 다른 글
[Deep Dive] 6장 - 데이터 타입 (0) | 2022.08.18 |
---|---|
[Deep Dive] 5장 - 표현식과 문 (0) | 2022.08.17 |
[Deep Dive] 4장 - 변수 (0) | 2022.08.16 |
[Deep Dive] 1장~ 3장 (0) | 2022.08.16 |
이벤트 루프, 콜 스택, 태스크 큐 (0) | 2022.05.29 |