์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋น ํจ์์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ this์ ๋ฐ์ธ๋ฉ๋๋ ๊ฐ์ฒด๊ฐ ๋ฌ๋ผ์ง๋ค. ์ฆ, ํจ์๋ฅผ ์ ์ธํ ๋ this์ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด๊ฐ ์ ์ ์ผ๋ก ๊ฒฐ์ ๋๋ ๊ฒ์ด ์๋๋ผ ํจ์๋ฅผ ํธ์ถํ ๋ ํจ์๊ฐ ์ด๋ป๊ฒ ํธ์ถ๋์๋์ง์ ๋ฐ๋ผ this์ ๋ฐ์ธ๋ฉํ ๊ฐ์ฒด๊ฐ ๋์ ์ผ๋ก ๊ฒฐ์ ๋๋ค.
- ์ ์ญ ๊ณต๊ฐ์์์ this๋ ์ ์ญ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
- ์ด๋ค ํจ์๋ฅผ ๋ฉ์๋๋ก์ ํธ์ถํ ๊ฒฝ์ฐ, this๋ ๋ฉ์๋ ํธ์ถ ์ฃผ์ฒด(๋ฉ์๋๋ช ์์ ๊ฐ์ฒด)๋ฅผ ์ฐธ์กฐํ๋ค.
- ์ด๋ค ํจ์๋ฅผ ํจ์๋ก์ ํธ์ถํ ๊ฒฝ์ฐ, this๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค. ๋ฉ์๋์ ๋ด๋ถ ํจ์์์๋ ๊ฐ๋ค.
- ์ฝ๋ฐฑ ํจ์ ๋ด๋ถ์์์ this๋ ํด๋น ์ฝ๋ฐฑ ํจ์์ ์ ์ด๊ถ์ ๋๊ฒจ๋ฐ์ ํจ์๊ฐ ์ ์ํ ๋ฐ์ ๋ฐ๋ฅด๋ฉฐ, ์ ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค.
- ์์ฑ์ ํจ์์์์ this๋ ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ค.
- apply, call, bind๊ฐ ํจ์์ ํธ์ถ/์์ฑ์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ, ํจ์ ๋ด์ this๋ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด์ด๋ค.
๊ฐ์ฒด์ ๋ฉ์๋๋ก ํธ์ถํ ๊ฒฝ์ฐ, ํด๋น ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋๋ค.
var obj = {
name: 'obj name',
print: function p() { console.log(this.name); }
};
obj.print(); // obj namenew๋ฅผ ์ฌ์ฉํ์ ๋ ํด๋น ๊ฐ์ฒด๋ก ๋ฐ์ธ๋ฉ๋๋ค.
var name = "global";
function Func() {
this.name = "Func";
this.print = function f() { console.log(this.name); };
}
var a = new Func();
a.print(); // Func์ผ๋ฐ ํจ์์ ๊ฒฝ์ฐ this๋ ์ ์ญ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋๊ณ , ํ์ดํ ํจ์์ ๊ฒฝ์ฐ ํจ์๊ฐ ์์ฑ๋ ์์ ์์ ์ฃผ๋ณ ์ค์ฝํ์ this ๊ฐ์ ๋ฐ๋๋ค. ํ์ดํ ํจ์๋ this๋ฅผ ๋ฐ์ธ๋ฉํ์ง ์๊ธฐ ๋๋ฌธ์, ์์ ์ค์ฝํ์ this๋ฅผ ๊ทธ๋๋ก ํ์ฉํ ์ ์๋ค.
- ๋ฉ์๋์ ํธ์ถ ์ฃผ์ฒด์ธ ํจ์๋ฅผ ์ฆ์ ์คํํ๋๋ก ํ๋ ๋ช ๋ น
- ์ฒซ๋ฒ์งธ ์ธ์๋ฅผ this๋ก ๋ฐ์ธ๋ฉํ๊ณ , ์ดํ์ ์ธ์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ํ๋ค.
- call๊ณผ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ ๋์ผ
- ์ฐจ์ด์ ์ด ์๋ค๋ฉด ๋๋ฒ์งธ ์ธ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์, ๊ทธ ๋ฐฐ์ด์ ์์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ํ๋ค.
- call๊ณผ ๋น์ทํ์ง๋ง, ํจ์๋ฅผ ์ฆ์ ํธ์ถํ์ง๋ ์๊ณ ๋๊ฒจ๋ฐ์ this ๋ฐ ์ธ์๋ค์ ๋ฐํ์ผ๋ก ์๋ก์ด ํจ์๋ฅผ ๋ฐํํ๊ธฐ๋ง ํ๋ ๋ฉ์๋
- ๋ค์ ์๋ก์ด ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์๋ฅผ ๋๊ธฐ๋ฉด, ๊ทธ ์ธ์๋ค์ ๊ธฐ์กด bind ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํ๋ ์ธ์๋ค์ ๋ค์ ์ด์ด์ ๋ฑ๋ก๋๋ค.
function func() {
console.log(this.name);
}
var obj = { name: 'obj name' };
func.call(obj); // obj name
func.apply(obj); // obj name
(func.bind(obj))(); // obj name- ์ฝ์ด ์๋ฐ์คํฌ๋ฆฝํธ (์ฑ )