๐ ์?
โผ JavaScript๋ฅผ ์ฌ์ฉํ๋ฉด์ this๋ฅผ ์ฌ์ฉํ์ ๋, ์ด๋ค ๊ฒฝ์ฐ์๋ {window}๊ฐ, ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ Object๊ฐ ์ถ๋ ฅ๋์๋ค.
โผ ์ด์ this์ ๋ํด ์ ๋ฆฌํ๊ณ ์ ๊ธ์ ์์ฑํ๋ค.
๐ this ํค์๋
โผ this๋ ์ํฉ์ ๋ฐ๋ผ์ ๋ป์ด 3~4 ๊ฐ์ง๋ก ๋ณ๊ฒฝ๋๋ค.
โ ์ต์์ this & function์์ this ์ฌ์ฉ
<script>
console.log(this);
</script>
<script>
function test() {
console.log(this);
}
test();
</script>
โผ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ window์ ๋ํ ์ ๋ณด๊ฐ ํ์๋๋ค.
โผ window๋ ์ ์ญ ๋ณ์ ๋ณด๊ด์์ด๋ค.
โ strict mode์์ function์์ this ์ฌ์ฉ
<script>
"use strict";
function test() {
console.log(this);
}
test();
</script>
โผ strict mode (์๊ฒฉํ ์คํ)์์ ์ผ๋ฐ ํจ์ ์์ this๋ฅผ ์ฌ์ฉํ๋ฉด undefined๊ฐ ์ถ๋ ฅ๋๋ค.
โ Object ์์ function์์ this ์คํ
<script>
var obj = {
name: "kim",
func: function () {
console.log(this);
},
};
obj.func();
</script>
โผ Object ์์ ํจ์์์ this๋ฅผ ์คํํ๋ฉด, Object๊ฐ ์ถ๋ ฅ๋๋ค.
โ Object ์์ Object ์์ function์์ this ์คํ
<script>
var obj = {
data: {
func: function () {
console.log(this);
},
},
};
obj.data.func();
</script>
โผ obj.data Object์ ๋ด์ฉ์ด ์ถ๋ ฅ๋๋ค.
โ Object ์์ Arrow function์์ this ์คํ
<script>
var obj = {
func: () => {
console.log(this);
},
};
obj.func();
</script>
โผ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ window์ ๋ํ ์ ๋ณด๊ฐ ํ์๋๋ค.
โผ Arrow Function์ ํน์ง์ ๋ด๋ถ this ๊ฐ์ ๋ณํ์ํค์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ this๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
๐ฅ ์ด๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ ์ด์
<script>
function test() {
console.log(this);
}
test(); // 1๋ฒ
window.test(); // 2๋ฒ
</script>
JavaScript์์๋ ํจ์๋ ๋ณ์๋ฅผ ์ ์ญ ๊ณต๊ฐ์์ ๋ง๋ค๋ฉด {window}์ ๋ณด๊ดํ๊ธฐ ๋๋ฌธ์, ์ ์ญ ๊ณต๊ฐ์์ this๋ฅผ ์ถ๋ ฅํ๋ฉด {window} ๋ด์ฉ์ด ์ถ๋ ฅ๋๋ค. ๋ฐ๋ผ์, 1๋ฒ ์ฝ๋๋ 2๋ฒ ์ฝ๋ ํ์์ผ๋ก test๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ฆ, this๋ ๋๋ฅผ ๋ด๊ณ ์๋ Object์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์, ์ ์ญ ๊ณต๊ฐ์์ this๋ฅผ ์ถ๋ ฅํ๋ฉด {window}๊ฐ ์ถ๋ ฅ๋๊ณ obj๋ผ๋ Object์์ this๋ฅผ ์ถ๋ ฅํ๋ฉด {obj}๊ฐ ์ถ๋ ฅ๋๋ค.
โ contructor์์ this ์ฌ์ฉํ๊ธฐ
<script>
function test() {
this.name = "hi";
}
var testObj = new test();
console.log(testObj);
</script>
โผ ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ this๋ ์๋ก ์์ฑ๋๋ Object์ instance์ด๋ค.
โ EventListener์ ๋ฑ๋กํ๋ function์์ this ์ฌ์ฉํ๊ธฐ
<div>
<button id="btn">๋ฒํผ</button>
</div>
<script>
document.getElementById("btn").addEventListener("click", function (e) {
console.log(this);
});
</script>
โผ ์ฌ๊ธฐ์ ์ฌ์ฉ๋๋ this๋ document.getElementById()๋ก ์ฐพ์ ํ๊ทธ์ด๋ค.
โผ e.currentTarget์ด๋ ๋์ผํ ์ถ๋ ฅ ๊ฐ์ ๋ํ๋ธ๋ค.
โ EventListener์ ๋ฑ๋กํ๋ Arrow function์์ this ์ฌ์ฉํ๊ธฐ
<div>
<button id="btn">๋ฒํผ</button>
</div>
<script>
document.getElementById("btn").addEventListener("click", () => {
console.log(this);
});
</script>
โผ Arrow Function์ ํน์ง์ผ๋ก this๊ฐ ์ฌ์ ์ ๋์ง ์์, this ๊ฐ์ด {window}๋ก ์ถ๋ ฅ๋๋ค.
โ Object์์ function์์ Array ForEach์ ๋ฑ๋กํ function์์ this ์ฌ์ฉํ๊ธฐ
<script>
var obj = {
func: function () {
var arr = [1, 2, 3];
arr.forEach(function () {
console.log(this);
});
},
};
obj.func();
</script>
โผ {window}๊ฐ ์ถ๋ ฅ๋๋ค.
โผ this๋ฅผ ์ถ๋ ฅํ๋ function์ ์ฐ๊ฒฐ๋์ด ์์ง ์๊ณ , ์ฝ๋ฐฑ ํจ์๋ก ๋ฑ๋กํ๋ function ์ด๊ธฐ์ {window}๊ฐ ์ถ๋ ฅ๋๋ค.
โ Object์์ function์์ Array ForEach์ ๋ฑ๋กํ Arrow function์์ this ์ฌ์ฉํ๊ธฐ
<script>
var obj = {
func: function () {
var arr = [1, 2, 3];
arr.forEach(() => {
console.log(this);
});
},
};
obj.func();
</script>
โผ {obj}๊ฐ ์ถ๋ ฅ๋๋ค.
โผ Arrow Function์ this๋ฅผ ์ฌ์ ์ ํ์ง ์๊ณ ๋ฐ๋ก ๋ฐ์ this๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, func์ this ์ถ๋ ฅ ๊ฐ์ด ๊ทธ๋๋ก ์ถ๋ ฅ๋๋ค.
๐ฅ function๊ณผ Arrow function ์ธ์ ์ฌ์ฉํ ๊น?
โ function ์ฌ์ฉ ์์
<script>
var obj = {
name: "kim",
say: function () {
console.log(`๋๋ ${this.name}์
๋๋ค.`);
},
};
obj.say();
</script>
โผ this ๊ฐ์ ์ฌ์ ์ํ์ฌ ์ฌ์ฉํด์ผ ํ ๋, function์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์์ฑํ๋ค.
โ ์์ ์ค๋ธ์ ํธ์ ๊ฐ์ผ๋ก ์ฌ์ ์ํด์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
โ Array function ์ฌ์ฉ ์์
<button id="btn">๋ฒํผ</button>
<script>
document.getElementById("btn").addEventListener("click", function () {
setTimeout(() => {
console.log(this.innerHTML);
}, 1000);
});
</script>
โผ this ๊ฐ์ ์ฌ์ ์ํ์ง ์๊ณ ์ฌ์ฉํด์ผ ํ ๋, Arrow function์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ์์ฑํ๋ค.
โ ์ผ๋ฐ ํจ์๋ก์จ ์ฌ์ฉ๋์ด, ์์ Object ๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ
'Web > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript ES6 & ๊ฐ์ฒด ์งํฅ ๋ฌธ๋ฒ (1) | 2023.04.25 |
---|---|
JavaScript ๊ธฐ๋ณธ ๋ฐ ์ฌ์ฉํ๊ธฐ (0) | 2023.04.23 |