this
this์ ์ ์
this
๋ ์์ ์ด ์ํ ๊ฐ์ฒด ๋๋ ์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์๊ธฐ์ฐธ์กฐ ๋ณ์this
๋ฅผ ํตํด ์์ ์ด ์ํ ๊ฐ์ฒด ๋๋ ์์ ์ด ์์ฑํ ์ธ์คํด์ค์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
this์ ํ์์ฑ
- ๊ฐ์ฒด๋ ํ๋กํผํฐ์ ๋ฉ์๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
ํ๋กํผํฐ : ์ํ(
state
)๋ฅผ ๋ํ๋
๋ฉ์๋ : ๋์์ ๋ํ๋ - ๊ฐ์ฒด๋ ์์ ์ด ์ํ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ฐธ์กฐํ๊ฑฐ๋ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊น
- ์์ ์ ํ๋กํผํฐ๋ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๋ ค๋ฉด ์ฐ์ ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ์์ฑ์ ํจ์ ๊ฒฝ์ฐ
new
ํค์๋๋ก ์์ฑ์ ํจ์๋ฅผ ํธ์ถํด์ผinstance
๊ฐ ์์ฑ๋๋ค. ์ฆ, ์์ฑ์ ํจ์๋ฅผ ์ ์ํ๋ ์์ ์ ์์ฑ๋ ์์ ์ธinstance
๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋ณ์๊ฐ ํ์ (= this)
this ๋ฐ์ธ๋ฉ
this
๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ,this
๋ฐ์ธ๋ฉ์ ํจ์ ํธ์ถ ๋ฐฉ์์ ์ํด ๋์ ์ผ๋ก ๊ฒฐ์ ๋ฐ์ธ๋ฉ์ด๋ ์๋ณ์์ ๊ฐ์ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ์๋ฏธ, this ๋ฐ์ธ๋ฉ์ this๊ฐ ๊ฐ๋ฆฌํฌ ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉ ํ๋ ๊ฒ
- ์๋ฐ์คํฌ๋ฆฝํธ์ this๋ ํจ์๊ฐ ํธ์ถ๋๋ ๋ฐฉ์์ ๋ฐ๋ผ this์ ๋ฐ์ธ๋ฉ ๋ ๊ฐ์ด ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
ํจ์ ํธ์ถ ๋ฐฉ์๊ณผ this ๋ฐ์ธ๋ฉ
- this์ ๋ฐ์ธ๋ฉ๋ ๊ฐ์ ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ(ํจ์ ์์ฑ ์์ ๊ณผ ๊ตฌ๋ถํ๊ธฐ) ๋์๋์ง์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
- ํจ์ ํธ์ถ ๋ฐฉ์์ ๋ค์ํจ
- ์ผ๋ฐ ํจ์ ํธ์ถ
- ๋ฉ์๋ ํธ์ถ
- ์์ฑ์ ํจ์ ํธ์ถ
- Function.prototype.apply/call/bind์ ์ํ ๊ฐ์ ํธ์ถ
์ผ๋ฐ ํจ์ ํธ์ถ
- ๊ธฐ๋ณธ์ ์ผ๋ก this์๋ ์ ์ญ ๊ฐ์ฒด(
global object
)๊ฐ ๋ฐ์ธ๋ฉ ๋๋ค. - ์ผ๋ฐ ํจ์๋ก ํธ์ถํ๋ฉด ํจ์ ๋ด๋ถ์
this
์๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค. strict mode
์ ์ผ๋ฐ ํจ์ ๋ด๋ถ์this
๋undefined
(์ผ๋ฐ ํจ์ ๋ด๋ถ์์ this ์ฌ์ฉ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ)- (์ค์ฒฉ ํจ์, ์ฝ๋ฐฑํจ์๋ฅผ ํฌํจํ)์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ ๋ชจ๋ ํจ์ ๋ด๋ถ์
tihs
์๋ ์ ์ญ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ ๋๋ค์ค์ฒฉํจ์๋ ์ฝ๋ฐฑํจ์์ this๋ฅผ ์ผ์น ์์ผ์ฃผ๊ธฐ ์ํด ๋ช ์์ ์ผ๋ก ๋ฐ์ธ๋ฉ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์ ๊ณต ๋๋ค.
๋ฉ์๋ ํธ์ถ
- ๋ฉ์๋ ๋ด๋ถ์
this
๋ ๋ฉ์๋๋ฅผ ์์ ํ ๊ฐ์ฒด๊ฐ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋๋ค. - ๋ฉ์๋๋ ํ๋กํผํฐ์ ๋ฐ์ธ๋ฉ๋ ํจ์๋ค => ์ฆ ๊ฐ์ฒด์ ํฌํจ ๋ ๊ฒ์ด ์๋๋ผ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌ
- ๋ฐ๋ผ์ ๋ฉ์๋๋ ๊ฐ์ฒด์ ์ํด ํธ์ถ ๋ ์ ์๊ณ ์ผ๋ฐ ๋ณ์์ ํ ๋น ํ์ฌ ์ผ๋น ํจ์๋ก ํธ์ถ ๋ ์๋ ์๋ค.
const anotherPerson = {
name: 'Kim'
};
// getName ๋ฉ์๋๋ฅผ anotherPerson ๊ฐ์ฒด์ ๋ฉ์๋๋ก ํ ๋น
anotherPerson.getName = person.getName;
// getName ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๋ anotherPerson์ด๋ค.
console.log(anotherPerson.getName()); // Kim
// getName ๋ฉ์๋๋ฅผ ๋ณ์์ ํ ๋น
const getName = person.getName;
// getName ๋ฉ์๋๋ฅผ ์ผ๋ฐ ํจ์๋ก ํธ์ถ
console.log(getName()); // ''
// ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ getName ํจ์ ๋ด๋ถ์ this.name์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ window.name๊ณผ ๊ฐ๋ค.
// ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ window.name์ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์ด๋ฆ์ ๋ํ๋ด๋ ๋นํธ์ธ ํ๋กํผํฐ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ ''์ด๋ค.
// Node.js ํ๊ฒฝ์์ this.name์ undefined๋ค.
์ ๋ฆฌ : ๋ฉ์๋ ๋ด๋ถ์ this
๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ ๋๋ค.
์์ฑ์ ํจ์ ํธ์ถ
- ์์ฑ์ ํจ์ ๋ด๋ถ์
this
๋ ์์ฑ์ ํจ์๊ฐ (๋ฏธ๋์) ์์ฑํ ์ธ์คํด์ค๊ฐ ๋ฐ์ธ๋ฉ ๋๋ค. - ์์ฑ์ ํจ์๋
new
์ฐ์ฐ์์ ํจ๊ป ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด ์์ฑ์ ํจ์๊ฐ ์๋๋ผ ์ผ๋ฐํจ์๋ก ๋์
// new ์ฐ์ฐ์์ ํจ๊ป ํธ์ถํ์ง ์์ผ๋ฉด ์์ฑ์ ํจ์๋ก ๋์ํ์ง ์๋๋ค. ์ฆ, ์ผ๋ฐ์ ์ธ ํจ์์ ํธ์ถ์ด๋ค.
const circle3 = Circle(15);
// ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ Circle์๋ ๋ฐํ๋ฌธ์ด ์์ผ๋ฏ๋ก ์๋ฌต์ ์ผ๋ก undefined๋ฅผ ๋ฐํํ๋ค.
console.log(circle3); // undefined
// ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋ Circle ๋ด๋ถ์ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
console.log(radius); // 15
Function.prototype.apply
/ call
/ bind
์ ์ํ ๊ฐ์ ํธ์ถ
apply
,call
,bind
๋ Function.prototype์ ๋ฉ์๋๋ก ๋ชจ๋ ํจ์๊ฐ ์์ ๋ฐ์ ์ฌ์ฉ ๊ฐ๋ฅapply
์call
์ ๋ณธ์ง์ ์ธ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ, ๋ฉ์๋ ํธ์ถ ์apply
๋call
์ ํน์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ํธ์ถํ ํจ์์this
์ ๋ฐ์ธ๋ฉํจbind
๋ฉ์๋๋apply
,call
๊ณผ ๋ฌ๋ฆฌ ํจ์๋ฅผ ํธ์ถํ์ง ์๋๋ค. ๋ค๋ง ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ผ๋ก this ๋ฐ์ธ๋ฉ์ด ๊ต์ฒด๋ ํจ์๋ฅผ ์๋กญ๊ฒ ์์ฑํด ๋ฐํbind
๋ ์ค์ฒฉํจ์ ๋๋ ์ฝ๋ฐฑํจ์์ this๊ฐ ๋ถ์ผ์นํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋จ
์ ๋ฆฌ
ํจ์ ํธ์ถ ๋ฐฉ์ | this ๋ฐ์ธ๋ฉ |
---|---|
์ผ๋ฐ ํจ์ ํธ์ถ | ์ ์ญ ๊ฐ์ฒด |
๋ฉ์๋ ํธ์ถ | ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด |
์์ฑ์ ํจ์ ํธ์ถ | ์์ฑ์ ํจ์๊ฐ (๋ฏธ๋์) ์์ฑํ ์ธ์คํด์ค |
apply ๋ฉ์๋ ๋ฑ์ ์ํ ๊ฐ์ ํธ์ถ |
์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ฒด |
'javascript > ๐ study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[5์ฃผ์ฐจ ์คํฐ๋]24์ฅ-ํด๋ก์ (0) | 2022.03.27 |
---|---|
[4์ฃผ์ฐจ ์คํฐ๋] 23์ฅ-์คํ ์ปจํ ์คํธ (0) | 2022.02.23 |
[4์ฃผ์ฐจ ์คํฐ๋] 21์ฅ- ๋นํธ์ธ ๊ฐ์ฒด (0) | 2022.02.23 |
[4์ฃผ์ฐจ ์คํฐ๋] 20์ฅ- strict mode (0) | 2022.02.23 |
[3์ฃผ์ฐจ ์คํฐ๋]19์ฅ-ํ๋กํ ํ์ (0) | 2022.02.14 |
๋๊ธ