๊ฐ์ฒด์งํฅ์ธ์์ ์ผ๋ฐ์ ์ผ๋ก this๋ผ๋ ์์ฝ์ด๋ ํจ์๊ฐ ์ํด ์๋ ๊ฐ์ฒด ์๊ธฐ ์์ ์ ๊ฐ๋ฆฌํค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์๊ธฐ ์์ ์ด๋ผ๋ ๋ง์ด ์๋นํ ๋ชจํธํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ผ๊ธ ๊ฐ์ฒด์ธ๋ฐ, ์ผ๊ธ๊ฐ์ฒด์ ์ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
๋ณ์๋ ๋ฐ์ดํฐ์ ํ ๋นํ ์ ์๋ค.
๋ค๋ฅธ ํจ์๋ฅผ ์ธ์๋ก ์ ๋ฌ ๋ฐ๋๋ค.
๋ค๋ฅธ ํจ์์ ๊ฒฐ๊ณผ๋ก์ ๋ฆฌํด๋ ์ ์๋ค.
์ด๋ฌํ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง์ผ๋ก ์ธํด, ์๋ฐ์คํฌ๋ฆฝํธ ํจ์๋ ๋ค์ํ ํ๊ฒฝ์์ ํธ์ถ๋ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์์ this๋ ํจ์๋ฅผ ํธ์ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ๋๋ค. ๋ค์์ ์ฝ๋๋ฅผ ๋ณด์.
const person = {
name : "JeongWoo",
whoami:function() {
//์ด๋ฆ : function()์ ๋ฉ์๋
console.log(this);
}
};
person.whoami();
const myname = person.whoami;
myname();
์์ ์ฝ๋๋ฅผ ๋ดค์ ๋, ๊ฒฐ๊ณผ์ ์ผ๋ก person.whoami();์ myname();๊ฐ ๊ฐ๋ค.
ํ์ง๋ง ์ค์ ๋ก ์ถ๋ ฅํ์ ๋๋, person.whoami()๋ ๊ฐ์ฒด์ธ person์ ์ถ๋ ฅํ๊ณ myname()์ window๋ฅผ ์ถ๋ ฅํ๋ค.
this๊ฐ ๊ฒฐ๊ตญ ํธ์ถํ ๋์(๊ฐ์ฒด)์ด๊ธฐ ๋๋ฌธ์ด๋ค(this === ํธ์ถํ ๋์)
person.whoami()์์ this๋ฅผ ์ฌ์ฉํ๋ whoami๋ฅผ ํธ์ถํ ๋์์ person์ด๊ธฐ์ this๊ฐ person์ ๊ฐ๋ฆฌํค๊ณ , whoami๋ฅผ ๋ถ๋ฌ๋ด๋ myname()๋ฅผ ํธ์ถํ ๋์์ ์ ์ญ(window)์ด๊ธฐ ๋๋ฌธ์ window๋ฅผ ์ถ๋ ฅํ๋ค.
this๋ฅผ ๋๊ฐ ํธ์ถํ๋๊ฐ์ ๋ฌด๊ดํ๊ฒ this๋ฅผ ๊ณ ์ ์ํค๋ ๊ฒ์ bind๋ผ๊ณ ํ๋ค.
const person = {
name : "JeongWoo"
}
function whoami (){
console.log(this);
}
const myname = whoami.bind(person);
whoami();
//window ์ถ๋ ฅ
myname();
์์ ์ฝ๋๋ bind๋ฅผ ์ด์ฉํ์ฌ myname์ this๋ฅผ person์ผ๋ก ๊ณ ์ ์ํจ ๊ฒ์ด๊ณ , ์คํ์ํค๋ฉด person์ด ์ถ๋ ฅ์ด ๋๋ค.
๊ฐ์ฒด์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ด ์
๋ฐ์ดํธํ ์ ์๋ค.
const person = {
name : "JeongWoo"
}
function whoami (birth, gender){
this.birth = birth;
this.gender = gender;
console.log(this)
};
const myname = whoami.bind(person, 95, "๋จ");
myname();
Call์ ๋ชจ๋ ํจ์์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, this๋ฅผ ํน์ ๊ฐ์ผ๋ก ์ง์ ํ ์ ์๋ค. ์๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉด call์ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
const person = {
name : "JeongWoo"
}
function whoami (){
console.log(this);
}
whoami();
whoami.call(person);
์์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด whoami();๋ window๋ฅผ ๊ฐ๋ฆฌํค๊ณ , whoami.call(person)๋ call์ ์ฌ์ฉํ์ฌ this๋ก ์ฌ์ฉํ ๊ฐ์ฒด๋ฅผ ๋๊ธฐ๋ฏ๋ก person์ ์ถ๋ ฅํ๊ฒ ๋๋ค.
๋ํ ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์
๋ฐ์ดํธํ์ฌ ์ฌ์ฉํ ์๋ ์๋ค.
const person = {
name : "JeongWoo"
}
function whoami (birth, gender){
this.birth = birth;
this.gender = gender;
console.log(this)
};
whoami.call(person, 95, "๋จ");
apply๋ ํจ์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์ผ๋ฉฐ, ๊ทธ ์ธ์๋ Call๊ณผ ์์ ํ ๊ฐ๋ค.
const person = {
name : "JeongWoo"
}
function whoami (birth, gender){
this.birth = birth;
this.gender = gender;
console.log(this)
};
whoami.apply(person, [95, "๋จ"]);