๐22 this
this
์์ ์ด ์์ฑํ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ ์๋ณ์
this
๋ฅผ ํตํด ์์ฑํ ์ธ์คํด์ค์ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.JS์์ง์ ์ํด ์๋ฌต์ ์ผ๋ก ์์ฑ๋๋ค.
funciont Foo = { this.a = a; Foo.prototype.getA = funciton() { return a*a } } Foo = new foo(3)
Foo
๋ foo๋ฅผ ์ฐธ์กฐํ ์๋ณ์this
๊ฐ ํ์
this ๋ฐ์ธ๋ฉ
this๋ฐ์ธ๋ฉ์ ํจ์ ํธ์ถ ๋ฐฉ์์ ์ํด ๋์ ์ผ๋ก ๊ฒฐ์ ๋ฐ์ธ๋ฉ
: ์๋ณ์์ ๊ฐ์ ์ฐ๊ฒฐํ๋ ๊ณผ์
(๋ณ์์ ์ธ: a=10 a์ 10์ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ์ธ๋ฉํ๋ ๊ฒ)
- JAVA,C++๊ณผ ๋ค๋ฅด๊ฒ JS์
this
๋ ํจ์๊ฐ ํธ์ถ๋๋ ๋ฐฉ์์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค - strict mode์ ๋ฐ๋ผ ๋ฌ๋ผ์ง
funciton foo(){
console.log(this)
//์ผ๋ฐ๋ชจ๋ : window
//strict mode: undefined
}
ํจ์ ํธ์ถ์ ๋ฐ๋ฅธ this ๋ฐ์ธ๋ฉ
const obj = {foo}
const bar = { a: 10}
// 1) ์ผ๋ฐํจ์ ํธ์ถ: window : ์ ์ญ ๊ฐ์ฒด
foo()
// 2) ๋ฉ์๋ ํธ์ถ: obj : ํธ์ถํ ๊ฐ์ฒด
obj.foo()
//3) ์์ฑ์ ํจ์ ํธ์ถ: foo{} : ์์ฑํ ์ธ์คํด์ค
new foo()
//4) Function.prototype.apply call bind
foo.call(bar) //bar
foo.apply(bar) //ba
foo.bind(bar)() //bar
์ผ๋ฐํจ์๋ก ํธ์ถ๋ ํจ์์ ๋ด๋ถ์ this์๋ ์ ์ญ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ ๋๋๋ฐ,
๋ด๋ถ ์ค์ฒฉํจ์,์ฝ๋ฐฑํจ์๊ฐ ๊ฐ๋ฆฌํค๋ this๊ฐ ์ผ๋ฐํจ์์ ๋ค๋ฅด๋ฉด ์๋๊ธฐ๋๋ฌธ์ ๋ฐ์ธ๋ฉ์ ํด์ค๋ค.
๋ฉ์๋์ this์ ๋ฉ์๋ ๋ด๋ถ์ ์ค์ฒฉ,์ฝ๋ฐฑํจ์์ this๊ฐ ๋ถ์ผ์นํ ๋ ์ฌ์ฉํ๋ค.
setTimeout({}.bind(this),100)
setTimeout(()=>console.log(this.value),100) //ํ์ดํํจ์ ๋ด๋ถ this = ์์ scope this
๋ฉ์๋๋ ๊ฐ์ฒด์ ํฌํจ๋ ๊ฒ์ด ์๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ ๋ณ๋์ ๊ฐ์ฒด
call,apply
์ธ์๋ก ์ ๋ฌํ๋ ๊ฐ์ฒด๋ฅผ this๋ก ๋ฐ์ธ๋ฉ ํ๋ฉฐ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ
bind
this๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ค.
bind์ call,apply๋ ์ด๋ค ์ ์ด ๋ค๋ฅธ๊ฐ?
3๊ฐ์ง ๋ค this๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์ฌ ๋ฐ์ธ๋ฉํ๋ ๊ณตํต์ ์ด ์์ง๋ง
call๊ณผ bind๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉฐ ํจ์๋ฅผ ํธ์ถํ์ง๋ง
bind๋ this๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ ๊ธฐ๋ฅ๋ง ํฉ๋๋ค.
ํนํ ๋ฉ์๋์ this์ ๋ฉ์๋ ๋ด๋ถ์ ์ค์ฒฉ,์ฝ๋ฐฑํจ์์ this๊ฐ ๋ถ์ผ์นํ ๋ ์ฌ์ฉํ๋ค.
this๊ฐ ๋ฌด์์ธ๊ฐ์? [โ์ง๋ฌธ]
์์ ์ด ์ํ ๊ฐ์ฒด์ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ณ์๋ฅผ ๋งํฉ๋๋ค.
this๊ฐ ํ์ํ ์ด์ [โ์ง๋ฌธ]
๋ฉ์๋๋ ์์ ์ด ์ํ ๊ฐ์ฒด์ ์ํ๋ฅผ ์ฐธ์กฐํ๊ณ ๋ณ๊ฒฝํ ์ ์์ด์ผ ํ๋๋ฐ ์ด๋ฅผ ์ํด์๋
์์์ด ์ํ ๊ฐ์ฒด์ ์์ฑํ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐธ์กฐ๋ณ์์ธ this๊ฐ ์์ด์ผ ํฉ๋๋ค.
๋ ์์ปฌ์ค์ฝํ์ this ๋ฐ์ธ๋ฉ์ ๊ฒฐ์ ์๊ธฐ๊ฐ ๋ค๋ฅด๋ค
๋ ์์ปฌ์ค์ฝํ๋ ํจ์๊ฐ ์ ์ธ๋ ํ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์ ์ ์ค์ฝํ๊ฐ ๊ฒฐ์ ๋์ง๋ง,
this๋ฐ์ธ๋ฉ์ ํจ์๋ฅผ ํธ์ถํ ๋ ๊ฒฐ์ ์ด ๋ฉ๋๋ค.
'๐ JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JavaScript replace์ ๋ณ์ ํ์ฉํ๊ธฐ - ์ ๊ทํํ์ (regExp) ์ด์ฉ (0) | 2022.05.17 |
---|---|
[JS Tam9์ํ] #9 ์๋ฐ์คํฌ๋ฆฝํธ์ ์คํ ์ปจํ ์คํธ (0) | 2021.08.25 |
[JS Tam9์ํ] #7 ๋นํธ์ธ ๊ฐ์ฒด (0) | 2021.08.09 |
[JS Tam9์ํ] #6 Prototype __proto__ [[Prototype]] (0) | 2021.08.08 |
[JS Tam9์ํ] #5 ํ๋กํผํฐ ์์ฑ๊ณผ ์์ฑ์ ํจ์์ ์ํ ๊ฐ์ฒด ์์ฑ (0) | 2021.07.26 |
๋๊ธ