๋ค์ด๊ฐ๋ฉฐ
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ์ง์์ด 1mm ๋ด๋ฆฐ ๋น์ฒ๋ผ ์์๋ ๋ง๋ ํ๋ ์์ ..
this์ ๋ํ ์ค๋ช ๊ธ๋ค์ ๋ด๋ ๋๋ฌด์ง ์ดํดํ๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
์ด๊ฒ ๋ญ๊ฐ์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋๊ฑด ์๊ฒ ๋๋ฐ ๊ทธ๋์... ์ด๋ป๊ฒ ๋๋ค๋ ? ?..
์งง๊ฒ ์๊ธฐํ์๋ฉด this๋ ๋๊ฐ ํธ์ถํ๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
์ด๋ ต๊ฒ๋ง ๋๊ปด์ก๋ this์ ๋ํด ์ ๋ฆฌํด ๋ณด์.
๊ทธ๋์ this๋??
์ผ๋จ this์ ์ฌ์ ์ ์๋ฏธ๋ '์ด๊ฒ'์ด๊ธด ํ๋ฐ.. ๋ญ ๊ฐ๋ฆฌํค๋๋.
๋ฐ๋ก ์์ ์ด ์ํ ๊ฐ์ฒด๋ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์๋ค.
C++์ด๋ JAVA์ ๊ฐ์ ํด๋์ค ๊ธฐ๋ฐ์ ์ธ์ด์์์ this๋ ํด๋์ค๊ฐ ์์ฑํ ์ธ์คํด์ค๋ค.
์ด๋ฏธ this๋ฅผ ์ ์ธํ๋ฉด์ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค๊ณ ๊ฒฐ์ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ this๋ ์ข ํน์ดํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์์ this๋ ํธ์ถ๋ฐฉ๋ฒ์ ๋ฐ๋ผ์ ๊ฒฐ์ ๋๋ค.
์ฆ, ๋๊ฐ ๋๋ฅผ ๋ถ๋ฅธ ๊ฒ์ธ๊ฐ?? ์ ๋ฐ๋ผ์ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
์ด๋ ๊ฒ ์ ์ธ์ด ์๋ ํธ์ถ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ์, ํน์ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋์ด this๋ฅผ ๊ณ ์ ํ๋ ๊ณผ์ ์ ๋ฐ์ธ๋ฉํ๋ค๊ณ ํ๋ค.
๊ทธ๋ผ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ์ this๊ฐ ์ด๋ป๊ฒ ๋ฐ์ธ๋ฉ๋๋์ง ์ดํด๋ณด์.
ํจ์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ฅธ this ๋ฐ์ธ๋ฉ
๊ฐ์ฒด ๋ฉ์๋ ์์์์ this
์ฌ๊ธฐ์์ this๋ ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ค.
const person = {
name: "mimi",
getName(){
return this.name;
}
}
console.log(person.getName()); // mimi
์ผ๋ฐ ํจ์(์ค์ฒฉ, ์ฝ๋ฐฑํจ์ ํฌํจ)์์์ this
์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค. ๋ธ๋ผ์ฐ์ ์ผ ๋์ ์ ์ญ๊ฐ์ฒด๋ window.
ํจ์ ์์์ ์ค์ฒฉ ํจ์๋ก ์ ์ํ๊ณ ์ผ๋ฐ ํจ์๋ก ํธ์ถํด๋ this๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ ๋๋ค.
function hello(){
console.log('hello -> this: ', this); // window
function hi(){
console.log('hi -> this: ', this); // window
}
hi();
}
hello();
์ฌ๊ธฐ์ '์ผ๋ฐ ํจ์'๋ผ๋ ํค์๋๋ฅผ ๋ถ์๋๋ฐ, ES6 ๋ฌธ๋ฒ์ ํ์ดํ ํจ์์์์ this์๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ดํ ํจ์์๋ ํจ์ ์์ฒด์ this ๋ฐ์ธ๋ฉ์ด ์๊ธฐ ๋๋ฌธ์ ์์ ์ค์ฝํ์ this๋ฅผ ๊ทธ๋๋ก ์ฐธ์กฐํ๋ค.
์ด ๋ถ๋ถ์ ํ์ดํ ํจ์์ ๋ํ ๊ธ์ ๋ฐ๋ก ์์ฑํด๋ณด๋ ค ํ๋ค.
์ด๋ฒคํธ ํธ๋ค๋ฌ ์์์์ this
์ด๋ฒคํธ ๋ฆฌ์ค๋์ ๋ฐ์ธ๋ฉ๋ HTML ์์๊ฐ this๋ค. (ํธ์ถ์ ์ด ์์๊ฐ ํ์ผ๋๊น~)
<button>button</button>
<script>
const button = document.querySelector('button');
button.addEventListener('click', function () {
console.log(this); // <button>button</button>
});
</script>
์์ฑ์์์์ this
์์ฑํ ์๋ก์ด ์ธ์คํด์ค(์์ฑ๋ ๊ฐ์ฒด)๊ฐ this๋ค.
function Person(name){
this.name = name;
this.getName = function(){
return this.name;
}
}
const person = new Person('mimi');
console.log(person.getName()); // mimi
์ฌ๊ธฐ์์ this๋ ์๋กญ๊ฒ ์์ฑํ ์ธ์คํด์ค, ์ฆ person ์์ ์ด ๋๋ ๊ฑฐ๋ค.
ํ์ง๋ง new ํค์๋๋ฅผ ๋นผ๋ฉด ์ผ๋ฐ ํจ์ ํธ์ถ๊ณผ ๊ฐ์์ ธ์ window๊ฐ this๊ฐ ๋๋ค๋ ์ฌ์ค!!
call(), apply(), bind()
๊ทธ๋ฆฌ๊ณ call, apply, bind ๋ฉ์๋๋ก this๋ฅผ ๋ช ์์ ๋ฐ์ธ๋ฉํ ์ ์๋ค.
apply()์ call()
apply()์ call() ๋ฉ์๋๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ฅผ this๋ก ๋ฐ์ธ๋ฉํ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ฅผ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๋ค.
๋์ด ๊ทธ๋ผ ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋ค๋ ๊ฑด๊ฐ ์ถ์ ์ ์์ง๋ง ๋ ๋ฒ์งธ ์ธ์๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๋ค.
apply() ๋ฉ์๋๋ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ๋ฐฐ์ด์ ํํ๋ก ๋ฐ์ ํจ์๋ก ์ ๋ฌํ๋ค.
์ฆ ํจ์์๊ฒ ๋ฐฐ์ด์ด๋ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ์ฃผ๋ก ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฐ๋ คํ ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
Call() ๋ฉ์๋๋ ๋ฆฌ์คํธ ํ์์ผ๋ก ๋ ๋ฒ์งธ ์ธ์๋ฅผ ํจ์์๊ฒ ์ ๋ฌํ๋ค.
bind()
bind ๋ฉ์๋๋ ์ฒซ ๋ฒ์งธ ์ธ์์ this๋ฅผ ๋ฐ์ธ๋ฉํ๋ค๋ ์ ์ ๊ฐ์ง๋ง, ์๋ก์ด ํจ์๋ฅผ ๋ฐํํ๋ค.
์ด ์๋ก์ด ํจ์๋ฅผ ์คํํด์ผ ์๋ณธ ํจ์๊ฐ ์คํ๋๋ค๋ ๊ฒ!..
๋ด๋ถ์ ์ค์ฒฉ ํจ์๋ ์ฝ๋ฐฑํจ์์ this๊ฐ ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ ํด๊ฒฐ๋ฐฉ๋ฒ์ผ๋ก ์ฐ์ธ๋ค.
use strict ๋ชจ๋์์์ this
use strict ๋ชจ๋์์์ this๋ ์ข ๋ค๋ฅด๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
use strict ๋ชจ๋์์๋ ํจ์ ๋ด์ this์ ๋ํดํธ ๋ฐ์ธ๋ฉ์ด ์๊ธฐ ๋๋ฌธ์ undefined๋ผ๋ ๊ฐ์ด ๋์จ๋ค.
์์ฑ์ ํจ์๊ฐ ์๋ ์ผ๋ฐ ํจ์์ ๋ด๋ถ์์๋ this๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ!..
(function (){
'use strict';
function foo(){
console.log(this); // undefined
}
foo();
function Foo(){
console.log(this); // Foo
}
new Foo();
}());
ํ์ดํ ํจ์์์์ this
ํ์ดํ ํจ์์์์ this ๋ํ ์กฐ๊ธ ๋ค๋ฅด๋ค.
์ฌ๊ธฐ์์ this๋ ์ผ๋ฐ์ ์ธ this์ ๋ค๋ฅด๊ฒ ์์ ์ ์ฐธ์กฐํ๋ this๋ฅผ ๋ง๋ค์ง ์๋๋ค.
๋์ ํจ์๊ฐ ์ ์ธ๋ ์ค์ฝํ์์์ this๋ฅผ ์์ํ๋ค. ์ฆ, ์์ ์ค์ฝํ์ this๋ฅผ ์ฐธ์กฐํ๋ค.
const myObj = {
myMethod() {
const myArrowFunction = () => {
console.log(this); // myObj ๊ฐ์ฒด
};
myArrowFunction();
}
};
myObj.myMethod(); // ํ์ดํ ํจ์๋ฅผ ํธ์ถํ ๋, this๋ ์์ ์ค์ฝํ์ธ myObj ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค
์ฐธ๊ณ
https://oneroomtable.tistory.com/entry/์๋ฐ์คํฌ๋ฆฝํธ-this๋-๋์ฒด-๋ฌด์์ผ๊น
๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ๐คธโ๏ธ
๋ฐฉ๋ฌธํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๐
ํฌ์คํ ๋ค์ ๊ณต๋ถ ์ค์ธ ๋ด์ฉ์ ๊ธ๋ก ์์ฑํ ๊ฒ์ด๋ผ ๋ถ์กฑํ ์ ์ด ๋ง์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
๋ถ์กฑํ ๋ถ๋ถ์ ๋ํ ์ฝ๋ฉํธ๋ ์ธ์ ๋ ํ์์ ๋๋ค.
์ข์ ํ๋ฃจ ๋ณด๋ด์ธ์, ๊ฐ์ฌํฉ๋๋ค! ๐
'๐ Studying > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] Obejct.entries ๋ฅผ ์ด์ฉํด ๊ฐ์ฒด ๊ฐ๊ณตํ๊ธฐ (0) | 2022.07.28 |
---|---|
[JavaScript] ํ์ดํ ํจ์ ์์๋ณด๊ธฐ (0) | 2022.07.27 |
[JavaScript] ๋ค๋ฅธ ์์ ํด๋์ค ๋ชจ๋ ์ง์ฐ๊ธฐ (0) | 2022.06.22 |
JavaScript 30 Challeneges - Console Tricks (0) | 2022.06.10 |
[JavaScript] classList ํ๋กํผํฐ (0) | 2022.06.06 |
Comment