Javascript 'this'
this의 값은 함수를 호출하는 방법에 의해 결정된다.
클로저는 선언되는 위치에 의해 달라진다.
this는 누가 호출했느냐가 this가 된다.
즉 "호출한객체가 this이다."
예제를 보면
const a = {
name : 'code',
who : function(){
console.log(this);
}
}
a.who(); 를 호출하면
who function안의 console.log(this)가 실행되고
여기서의 this는 a가 who()를 호출한것이 되므로
const a 객체 본인이된다.
그럼 코드를 변형시켜서
let b = a.who; 즉 a객체의 who함수를 변수 b에 할당하고
b를 실행해보자
b();
그럼 b()는 a.who이고 a.who() 가 실행되면 console.log(this)가 실행되는거고
여기서의 this는 b()를 호출한 'window' 가 된다
bind를 사용해서 this를 예외적으로 고정시켜보자
let bindedC = b.bind(a);
이렇게되면 b의 this는 무조건 a가된다.
bindedC()를 호출하면 ?? b()가실행되고 b()내부의 a.who가 실행되고 최종적으로 a.who의 console.log(this)가 실행되는데
여기서의 this는 b.bind(a)를 했으므로 무조건 a가된다.
즉 console.log의 결과로 a객체가 나온다.
전역컨텍스트에서 this는 window 객체이다.
'use strict'는 엄격모드이다.
객체 메서드에서 this는 함수를 호출한 객체인 Object본인이다.
this가 객체 밖에서 정의되었던 안에서 정의되었던
this가 호출된 그 시점의 객체가 this가 된다.
.바로 왼쪽의 객체가 this
예를들어
fucntion main() {
console.log(this);
}
const object = {
name : '나',
smallObject : {
name : '너',
main
},
};
이렇게 선언되어있을때
object.smallObject.main()을 호출하면??
main()내부 console.log(this)가 실행되고 .main() 왼쪽의 smallObject가 this가된다.
이벤트 처리기 에서의 this는 event.target이다.
'코딩조각' 카테고리의 다른 글
| [Java] Hash 알고리즘과 Hash충돌 (0) | 2024.06.21 |
|---|---|
| [Java] 다형성에 대해 알아보자(feat.다형적 참조, 메서드 오버라이딩) (0) | 2024.02.22 |
| [Spring] 엔티티 설계시 주의사항 (2) | 2024.01.02 |
| [java] static 메서드 사용법(주의점) (0) | 2023.12.11 |
| [java] java는 항상 변수의 값을 복사해서 대입한다 (1) | 2023.12.07 |