๐ฉ call
๋ฉ์๋์ ํธ์ถ ์ฃผ์ฒด์ธ ํจ์๋ฅผ ์ฆ์ ์คํํ๋๋ก ํ๋ ๋ช ๋ น
Function.prototype.call(thisArg[, arg1[, arg2[, ...]]])
์ด๋ call ๋ฉ์๋์ ์ฒซ ๋ฒ์งธ ์ธ์๋ฅผ this๋ก ๋ฐ์ธ๋ฉํ๊ณ , ์ดํ์ ์ธ์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ํ๋ค.
ํจ์๋ฅผ ๊ทธ๋ฅ ์คํํ๋ฉด this๋ ์ ์ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง๋ง call ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ์์์ ๊ฐ์ฒด๋ฅผ this๋ก ์ง์ ํ ์ ์๋ค.
// call ๋ฉ์๋-1
var func = function (a, b, c) {
console.log(this, a, b, c);
};
func(1, 2, 3); // Window{ ... } 1 2 3
func.call({ x: 1 }, 4, 5, 6); // { x: 1 } 4 5 6
// call ๋ฉ์๋-2
var obj = {
a: 1,
method: function (x, y) {
console.log(this.a, x, y);
}
}
obj.method(2, 3); // 1 2 3
obj.method.call({ a: 4 }, 5, 6); // 4 5 6
๐ฉ apply
call ๋ฉ์๋์ ๊ธฐ๋ฅ์ ์ผ๋ก ์์ ํ ๋์ผํ๋ค.
Function.prototype.apply(thisArg[, argsArray])
call ๋ฉ์๋๋ ์ฒซ ๋ฒ์งธ ์ธ์๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ์ธ์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ํ๋ ๋ฐ๋ฉด, apply ๋ฉ์๋๋ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐ์ ๊ทธ ๋ฐฐ์ด์ ์์๋ค์ ํธ์ถํ ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ง์ ํ๋ค๋ ์ ์์๋ง ์ฐจ์ด๊ฐ ์๋ค.
// apply ๋ฉ์๋
var func = function (a, b, c) {
console.log(this, a, b, c);
};
func.apply({ x: 1 }, [4, 5, 6]); // { x: 1 } 4 5 6
var obj = {
a: 1,
method: function (x, y) {
console.log(this.a, x, y);
}
};
obj.method.apply({ a: 4 }, [5, 6]); // 4 5 6
๐ฉ bind
ES5์์ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก, call๊ณผ ๋น์ทํ์ง๋ง ์ฆ์ ํธ์ถํ์ง ์๊ณ ๋๊ฒจ๋ฐ์ this ๋ฐ ์ธ์๋ค์ ๋ฐํ์ผ๋ก ์๋ก์ด ํจ์๋ฅผ ๋ฐํํ๊ธฐ๋ง ํ๋ ๋ฉ์๋์ด๋ค.
Function.prototype.bind(thisArg[, arg1[, arg2[, ...]]])
๋ค์ ์๋ก์ด ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์๋ฅผ ๋๊ธฐ๋ฉด ๊ทธ ์ธ์๋ค์ ๊ธฐ์กด bind ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํ๋ ์ธ์๋ค์ ๋ค์ ์ด์ด์ ๋ฑ๋ก๋๋ค. ์ฆ, bind ๋ฉ์๋๋
- ํจ์์ this๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฉํ๋ ๊ฒ
- ๋ถ๋ถ ์ ์ฉ ํจ์๋ฅผ ๊ตฌํํ๋ ๊ฒ
๋ ๊ฐ์ง ๋ชฉ์ ์ ๋ชจ๋ ์ง๋๋ค.
// this ์ง์ ๊ณผ ๋ถ๋ถ ์ ์ฉ ํจ์ ๊ตฌํ
var func = function (a, b, c, d) {
console.log(this, a, b, c, d);
};
func(1, 2, 3, 4); // Window{ ... } 1 2 3 4
var bindFunc1 = func.bind({ x: 1 });
bindFunc1(5, 6, 7, 8); // { x: 1 } 5 6 7 8
'JavaScript > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript] scope, scope chain (0) | 2021.10.29 |
---|---|
[JavaScript] ์ ์ญ ๋ณ์, ์ง์ญ ๋ณ์ (0) | 2021.10.29 |
๊ฐ๋น์ง ์ปฌ๋ ํฐ(GC) (0) | 2021.10.22 |
[๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ] JavaScript ๊ธฐ์ด ๊ฐ์(2) (ES5+) (0) | 2021.10.06 |
[๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ] JavaScript ๊ธฐ์ด ๊ฐ์(1) (ES5+) (0) | 2021.10.05 |
๋๊ธ