코딩조각

[javascript] Javascript에서 자주나오는 'this'란 뭘까

밍튜 2024. 4. 26. 12:49

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이다.