Skip to Content
๐ŸŽ‰ Welcome to JS World!!! ๐ŸŽ‰

22์žฅ this

22.1 this ํ‚ค์›Œ๋“œ

  • ๊ฐ์ฒด๋Š” ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” property์™€ ๋™์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” method๋ฅผ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋ฌถ์€ ๊ฒƒ์ด๋‹ค.

  • method๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ, property๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์ด๋•Œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐํ•˜๋ ค๋ฉด ๋จผ์ € ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด(์˜ ์‹๋ณ„์ž)๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ์ด๋ฏธ ๊ณ ์œ  ์‹๋ณ„์ž ์ด๋ฆ„์ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฏ€๋กœ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

const circle = { radius: 5, getDiameter() { return 2 * circle.radius; }, }; console.log(circle.getDiameter());
  • ์ฐธ์กฐ ํ‘œํ˜„์‹์ด ํ‰๊ฐ€๋˜๋Š” ์‹œ์ ์€ getDIameter ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ํ•จ์ˆ˜ ๋ชธ์ฒด๊ฐ€ ์‹คํ–‰๋˜๋Š” ์‹œ์ ์ด๋‹ค.

    • ์œ„ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์€ circle ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ธฐ ์ง์ „์— ํ‰๊ฐ€๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์—์„œ getDiameter ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์‹œ์ ์— ์ด๋ฏธ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์–ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ circle ์‹๋ณ„์ž ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ๊ทธ๋Ÿฌ๋‚˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ, ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ์ „์— ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ this ์‹๋ณ„์ž์ด๋‹ค.

  • this๋Š” ์ž์‹ ์ด ์†ํ•œ ๊ฐ์ฒด ๋˜๋Š” ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ž๊ธฐ ์ฐธ์กฐ ๋ณ€์ˆ˜๋‹ค.

    • this๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ž์‹ ์ด ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ ๊ฐ€๋Šฅ
    • this๋Š” JS ์—”์ง„์— ์˜ํ•ด ์•”๋ฌต์  ์ƒ์„ฑ
    • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ arguments ๊ฐ์ฒด์™€ this๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ์ „๋‹ฌ๋˜๊ณ , ์ง€์—ญ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๋‹จ, this ๋ฐ”์ธ๋”ฉ(this๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’)์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ์˜ํ•ด ๋™์ ์œผ๋กœ ๊ฒฐ์ •

[!note] ๋ฐ”์ธ๋”ฉ ๋ฐ”์ธ๋”ฉ์ด๋ž€ ์‹๋ณ„์ž์™€ ๊ฐ’์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณผ์ • ๋ณ€์ˆ˜ ์„ ์–ธ : ๋ณ€์ˆ˜ ์ด๋ฆ„๊ณผ ํ™•๋ณด๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ(๊ฐ’)์„ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ฒƒ

  • ์ž๋ฐ”๋‚˜ C++ ๊ฐ™์€ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์–ธ์–ด์—์„œ this๋Š” ํ•ญ์ƒ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

    • JS์˜ this๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ์‹ค์ œ ๊ฐ์ฒด๋‚˜ ์ƒ์„ฑ๋  ์ธ์Šคํ„ด์Šค ๋“ฑ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค. strict mode๋„ this ๋ฐ”์ธ๋”ฉ์— ์˜ํ–ฅ์„ ์ค€๋‹ค(20.6.1 ์ ˆ)
  • this๋Š” ์ „์—ญ, ํ•จ์ˆ˜ ๋‚ด๋ถ€ ์ฝ”๋“œ ์–ด๋””์—์„œ๋‚˜ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ํ•˜์ง€๋งŒ this๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€, ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ strict mode๊ฐ€ ์ ์šฉ๋œ ์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ this์—๋Š” undefined๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค. ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ this๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

22.2 ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹๊ณผ this ๋ฐ”์ธ๋”ฉ

  • this ๋ฐ”์ธ๋”ฉ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋œ๋‹ค.

  • ๊ทธ๋Ÿฐ๋ฐ ๋™์ผ ํ•จ์ˆ˜๋„ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๋‹ค. <ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹>

  1. ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ
  2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
  3. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜ธ์ถœ
  4. Function.prototype.apply/call/bind ๋ฉ”์„œ๋“œ์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ
const foo = function () { console.dir(this); }; // 1. ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ : this๋Š” ์ „์—ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ€์ง„๋‹ค. foo(); // window // 2. ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ : this๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด obj๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. const obj = { foo }; obj.foo(); // obj // 3. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜ธ์ถœ : this๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. new foo(); // foo {} // 4. Function.prototype.apply/call/bind ๋งค์„œ๋“œ์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ : this๋Š” ์ฃผ์–ด์ง„ ์ธ์ˆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋œ๋‹ค. const bar = { name: "bar" }; foo.call(bar); // bar foo.apply(bar); // bar foo.bind(bar)(); // bar

22.2.1 ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ

  • ๊ธฐ๋ณธ์ ์œผ๋กœ this์—์„œ๋Š” ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

  • ์ „์—ญ ํ•จ์ˆ˜ ํ˜น์€ ์ค‘์ฒฉ ํ•จ์ˆ˜๋ฅผ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•˜๋ฉด this์— ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

  • ๋‹จ, strict mode๊ฐ€ ์ ์šฉ๋œ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ๋‚ด๋ถ€ this์—๋Š” undefined๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜์—์„œ this๋Š” ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋“ฑ ์–ด๋–ค ํ•จ์ˆ˜๋ผ๋„ ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋ฉด this์— ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

  • ์™ธ๋ถ€ ํ•จ์ˆ˜์™€ ๋‚ด๋ถ€ ์ค‘์ฒฉ ํ•จ์ˆ˜, ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ this๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์€ ์ค‘์ฒฉ ํ•จ์ˆ˜ ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ—ฌํผ ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ ๋‹ค.

    • ๋”ฐ๋ผ์„œ ๋‚ด๋ถ€ this ๋ฐ”์ธ๋”ฉ์„ ์™ธ๋ถ€ this ๋ฐ”์ธ๋”ฉ๊ณผ ์ผ์น˜์‹œ์ผœ์•ผ ํ•  ํ•„์š”์„ฑ์ด ์žˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜์— this๋ฅผ ๋ฏธ๋ฆฌ ๋„ฃ์–ด๋†“๊ณ  ๊ฐ€์ ธ๋‹ค ์“ฐ๊ฑฐ๋‚˜, apply / call / bind ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
    • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ, ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์“ฐ๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ this ๋ฐ”์ธ๋”ฉ์ด ์ผ์น˜ํ•˜๊ฒŒ ๋œ๋‹ค.

22.2.2 ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ

  • ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด, ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ์นจํ‘œ ์—ฐ์‚ฐ์ž ์•ž์— ๊ธฐ์ˆ ๋œ ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.
  • ๋‹จ, ์ฃผ์˜์ ์€ ๋ฉ”์„œ๋“œ๋ฅผ ์†Œ์œ ํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
const person = { name: "Lee", getName() { return this.name; }, };

์ด ์˜ˆ์ œ์—์„œ getName() ๋ฉ”์„œ๋“œ๋Š” person ๊ฐ์ฒด ์•ˆ์—์„œ ์ •์˜๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋ฉ”์„œ๋“œ๋Š” ํ”„๋กœํผํ‹ฐ์— ๋ฐ”์ธ๋”ฉ๋œ ํ•จ์ˆ˜์ด๋‹ค.

  • ์ฆ‰, person ๊ฐ์ฒด์˜ getName ํ”„๋กœํผํ‹ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
const anotherPerson = { name: "Kim", }; anotherPerson.getName = person.getName; const getName = person.getName;
  • ๋”ฐ๋ผ์„œ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this๋Š” ํ˜ธ์ถœ ์‹œ์ ์— ๊ฒฐ์ •๋˜์–ด ํ˜ธ์ถœํ•œ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.
    • ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋œ this๋„ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

22.2.3 ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ํ˜ธ์ถœ

  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this์—๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๊ฐ€ ๋ฏธ๋ž˜์— ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.
    • Class ๊ธฐ๋ฐ˜ ์–ธ์–ด์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ, ๋งŒ์•ฝ new ์—ฐ์‚ฐ์ž์™€ ํ•จ๊ป˜ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•˜๊ณ , this๋„ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค.

22.2.4 Function.prototype.apply/call/bind ๋ฉ”์„œ๋“œ์— ์˜ํ•œ ๊ฐ„์ ‘ ํ˜ธ์ถœ

  • apply, call, bind๋Š” Function.prototype์˜ ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • apply์™€ call ๋ฉ”์„œ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ํŠน์ • ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜์˜ this์— ๋ฐ”์ธ๋”ฉํ•œ๋‹ค.
    • apply์™€ call ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜ ์ „๋‹ฌ ๋ฐฉ์‹๋งŒ ๋‹ค๋ฅผ ๋ฟ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
function getThisBinding() { console.log(arguments); return this; } const thisArg = { a: 1 }; console.log(getThisBinding.apply(thisArg, [1, 2, 3])); console.log(getThisBinding.call(thisArg, 1, 2, 3));
  • apply ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฌถ์–ด ์ „๋‹ฌํ•˜๊ณ , call ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ฆฌ์ŠคํŠธ๋กœ ์ „๋‹ฌํ•œ๋‹ค.

  • apply, call ๋ฉ”์„œ๋“œ์˜ ๋Œ€ํ‘œ์  ์šฉ๋„๋Š” arguments ๊ฐ์ฒด์™€ ๊ฐ™์€ ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์— ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

function convertArgsToArray() { console.log(arguments); const arr = Array.prototype.slice.call(arguments); console.log(arr); return arr; } convertArgsToArray(1, 2, 3); // [1, 2, 3]
  • bind ๋ฉ”์„œ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ , ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ ๊ฐ’์œผ๋กœ this ๋ฐ”์ธ๋”ฉ์ด ๊ต์ฒด๋œ ํ•จ์ˆ˜๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค.
function getThisBinding() { return this; } const thisArg = { a: 1 }; // bind ๋ฉ”์„œ๋“œ๋Š” ์ „๋‹ฌํ•œ ์ธ์ˆ˜๋กœ this๊ฐ€ ๊ต์ฒด๋œ getThisBinding์„ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•ด ๋ฐ˜ํ™˜ํ•œ๋‹ค. console.log(getThisBinding.bind(thisArg)); // getThisBinding //bind ๋ฉ”์„œ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฐ˜ํ™˜๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๋‹ค์‹œ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค. console.log(getThisBinding.bind(thisArg)()); // {a: 1}
  • bind ๋ฉ”์„œ๋“œ๋Š” ๋‚ด๋ถ€ ์ค‘์ฒฉ ํ•จ์ˆ˜, ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ this ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
const person = { name: 'Lee', foo(callback) { setTimeout(callback.bind(this), 100); } }; person.foo(function() { console.log('Hi! my name is ${this.name}.`); })
Last updated on