์ด๋ค ๋ฉ์๋๋ ๋ชจ๋ ํจ์๊ฐ ์์๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
: ์ฃผ์ด์ง this ๋ฐ์ธ๋ฉ๊ณผ ์ธ์ ๋ฆฌ์คํธ ๋ฐฐ์ด
์ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถํ๋ค.
๋ฐฐ์ด ๋๋ ์ ์ฌ๋ฐฐ์ด ๊ฐ์ฒด
: ์ฃผ์ด์ง this ๋ฐ์ธ๋ฉ๊ณผ ,๋ก ๊ตฌ๋ถ๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ํจ์๋ฅผ ํธ์ถํ๋ค.
๐ฅ apply์ call๋ฉ์๋์ ๋ณธ์ง์ ์ธ ๊ธฐ๋ฅ์ ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค. ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์๋ง ๋ค๋ฅผ ๋ฟ ๋์ผํ๊ฒ ๋์ํจ.
๐ค arguments ๊ฐ์ฒด์ ๊ฐ์ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
์ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ!!
๐พ#์์
function foo(){
console.log(arguments);
const arr = Array.prototype.slice.call(arguments);
// const arr = Array.prototype.slice.apply(arguments);
console.log(arr);
return arr;
}
foo(1,2,3); // [1,2,3]
: apply์ call ๋ฉ์๋์ ๋ค๋ฅด๊ฒ ํจ์๋ฅผ ํธ์ถํ์ง ์๋๋ค.
: ์ฒซ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํ ๊ฐ์ผ๋ก this ๋ฐ์ธ๋ฉ์ด ๊ต์ฒด๋ ํจ์๋ฅผ ์๋กญ๊ฒ ์์ฑํด ๋ฐํํ๋ค!!
๐พ#01
function foo(){
return this;
}
// this๋ก ์ฌ์ฉํ ๊ฐ์ฒด
const thisArg = { a:1 };
console.log(foo.bind(thisArg)); // foo
console.log(foo.bind(thisArg)()); // { a:1 }
๐ฅ bind ๋ฉ์๋๋ ํจ์๋ฅผ ํธ์ถํ์ง ์์ผ๋ฏ๋ก ๋ช ์์ ์ผ๋ก ํธ์ถํด์ผ ํจ.
๐ค ๋ฉ์๋์ this์ ๋ฉ์๋ ๋ด๋ถ์ ์ค์ฒฉ ํจ์ ๋๋ ์ฝ๋ฐฑ ํจ์์ this๊ฐ ๋ถ์ผ์นํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค!!
๐พ#02
const person = {
name: 'lee',
foo(callback) {
// bind ๋ฉ์๋๋ก callback ํจ์ ๋ด๋ถ์ this ๋ฐ์ธ๋ฉ์ ์ ๋ฌ
setTimeout(callback.bind(this), 100);
}
}
person.foo(function() {
console.log(`Hi! my name is ${this.name}.`); // Hi! my name is lee.
});