[Deep Dive] Event(2)

link717ยท2021๋…„ 9์›” 18์ผ
0

Deep Dive

๋ชฉ๋ก ๋ณด๊ธฐ
27/28
post-thumbnail

๐ŸŒผ 40.5 ์ด๋ฒคํŠธ ๊ฐ์ฒด

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฒคํŠธ์— ๊ด€๋ จ๋œ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์ฒซ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š”๋ฐ, ์ด ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›์œผ๋ ค๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <!--์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์ด event๊ฐ€ ์•„๋‹ˆ๋ฉด ์ด๋ฒคํŠธ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›์ง€ ๋ชปํ•œ๋‹ค.-->
  <body onclick="showCoords(event)">
    <p>ํด๋ฆญํ•œ ๊ณณ์˜ ์ขŒํ‘œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.</p>
    <em class="message"></em>
    <script>
      const $msg = document.querySelector(".message");

      function showCoords(e) {
        $msg.textContent = `clientX: ${e.clientX}, clientY: ${e.clientY}`;
      }
    </script>
  </body>
</html>

๐ŸŒผ 40.5.2 ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ ๊ณตํ†ต ํ”„๋กœํผํ‹ฐ

Event ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ด๋ฒคํŠธ ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ์ƒ์†๋ฐ›๋Š” ๊ณตํ†ต ํ”„๋กœํผํ‹ฐ์ด๋‹ค.

  • eventPhase: ์ด๋ฒคํŠธ ์ „ํŒŒ ๋‹จ๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. (0: ์ด๋ฒคํŠธ ์—†์Œ, 1: ์บก์ฒ˜๋ง ๋‹จ๊ณ„, 2: ํƒ€๊นƒ ๋‹จ๊ณ„, 3: ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„)

  • target: ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • currentTarget: ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ DOM ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • cancelable: preventDefault ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฒคํŠธ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋Œ„๋‹ค. (false: ์ทจ์†Œํ•  ์ˆ˜ ์—†๋‹ค.)

๐ŸŒผ 40.6 ์ด๋ฒคํŠธ ์ „ํŒŒ

DOM ์š”์†Œ ๋…ธ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋Š” DOM ํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ(propagation)๋œ๋‹ค. ์ด๋ฅผ ์ด๋ฒคํŠธ ์ „ํŒŒ๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋ฒคํŠธ ์ „ํŒŒ๋Š” ์ „ํŒŒ๋˜๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ ๊ฐ์ฒด๋Š” window์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ด๋ฒคํŠธ ํƒ€๊นƒ์„ ํ–ฅํ•ด ์ „ํŒŒ๋˜๋Š”๋ฐ ์บก์ฒ˜๋ง-ํƒ€๊นƒ-๋ฒ„๋ธ”๋ง ์ˆœ์„œ์ด๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ/ํ”„๋กœํผํ‹ฐ ํ˜•ํƒœ๋กœ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•œ ๊ฒฝ์šฐ์—๋Š” ํƒ€๊นƒ๊ณผ ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„์˜ ์ด๋ฒคํŠธ๋งŒ ์บ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์€ ์„ธ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ true๋กœ ์„ค์ •ํ•˜๋ฉด ์บก์ฒ˜๋ง ๋‹จ๊ณ„์˜ ์ด๋ฒคํŠธ๋ฅผ ์„ ๋ณ„์ ์œผ๋กœ ์บ์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์บก์ฒ˜๋ง ๋‹จ๊ณ„: ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ์—์„œ ํ•˜์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ

  • ํƒ€๊นƒ ๋‹จ๊ณ„: ์ด๋ฒคํŠธ๊ฐ€ ์ด๋ฒคํŠธ ํƒ€๊นƒ์— ๋„๋‹ฌ

  • ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„: ์ด๋ฒคํŠธ๊ฐ€ ํ•˜์œ„ ์š”์†Œ์—์„œ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ

๐ŸŒผ 40.7 ์ด๋ฒคํŠธ ์œ„์ž„

์ด๋ฒคํŠธ ์œ„์ž„(delegation)์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ DOM ์š”์†Œ์— ๊ฐ๊ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋Œ€์‹  ํ•˜๋‚˜์˜ ์ƒ์œ„ ๋” ์š”์†Œ์— ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ํ•˜์œ„ ์š”์†Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ๋ชจ๋‘ ํ•ธ๋“ค๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค. ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ํ•˜์œ„์— ๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋œ ์š”์†Œ์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ํ•ธ๋“ค๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋ฒคํŠธ๋ฅผ ์‹ค์ œ ๋ฐœ์ƒ์‹œํ‚จ ์š”์†Œ๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•œ DOM ์š”์†Œ๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒคํŠธ ํƒ€๊นƒ์„ ๊ฒ€์‚ฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

    • Element.prototype.matches('์„ ํƒ์ž')๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฒคํŠธ๋ฅผ ์ƒ์œ„์— ๋ฐ”์ธ๋”ฉํ•  ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ target ํ”„๋กœํผํ‹ฐ์™€ currentTarget ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒผ 40.8 DOM ์š”์†Œ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์กฐ์ž‘

  • ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ preventDefault ๋ฉ”์„œ๋“œ๋Š” DOM ์š”์†Œ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ค‘๋‹จ์‹œํ‚จ๋‹ค.

    • form ์š”์†Œ์˜ ๊ฒฝ์šฐ, submit ๋™์ž‘์ด ์‹คํ–‰๋  ๊ฒฝ์šฐ, ํŽ˜์ด์ง€๊ฐ€ ์ž๋™์ ์œผ๋กœ refresh๋˜๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋ฒคํŠธ ๊ฐ์ฒด์˜ stopPropagation ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฒคํŠธ ์ „ํŒŒ๋ฅผ ์ค‘์ง€์‹œํ‚จ๋‹ค. stopPropagation์€ ํ•˜์œ„ DOM ์š”์†Œ์˜ ์ด๋ฒคํŠธ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐ŸŒผ 40.9 ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ this

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ธํ•ด ์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋‹จ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <!-- ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•œ this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ์ด๋‹ค.
    ์ด๋ฒคํŠธ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์šฐ์ธก์˜ ๋‚ด์šฉ์€ onclick ํ•จ์ˆ˜ body์—์„œ ์‹คํ–‰๋  ๊ตฌ๋ฌธ์ด๋‹ค.
    ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜(IIFE) ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ console.log(this)๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.-->
    <button class="button1" onclick="(() => console.log(this))(); handleClick1();">0</button>
    <!--์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด event๋กœ ์•”๋ฌต์ ์œผ๋กœ ๋ช…๋ช…๋œ๋‹ค.-->
    <button class="button2" onclick="handleClick2(event)">0</button>
    <button class="button3">0</button>
    <button class="button4">0</button>

    <script>
      // ์ผ๋ฐ˜ํ•จ์ˆ˜๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” window์ด๋‹ค.
      function handleClick1() {
        console.log(this);
      }

      // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋ฐ›์€ ์ธ์ž, e๋Š” ์ด๋ฒคํŠธ ๊ฐ์ฒด์ด๋‹ค.
      // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” this๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ณ  ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
      // this๋Š” window์ด๋‹ค.
      const handleClick2 = (e) => {
        console.log(e);
        console.log(this);
      };

      const $button3 = document.querySelector(".button3");
      const $button4 = document.querySelector(".button4");
      
      // ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ๊ฐ€ this์ด๋‹ค.
      $button3.onclick = function () {
        console.log(this);
      };
      
      // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” this๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๊ณผ์ •์ด ์ œ์™ธ๋จ,
      // ์ ‘๊ทผํ•˜๊ณ ์žํ•˜๋ฉด ์Šค์ฝ”ํ”„์ฒด์ธ์ƒ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด this์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
      // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋‚ด์—์„œ this๊ฐ€ ์ „์—ญ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์•ˆ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ๋‹ค.
      $button4.addEventListener("click", () => {
        console.log(this);
      });
      
      // console.log(1)์€ return ๊ฐ’์ด undefined์ด๋‹ค.
      // console.log(1)์ด ๋ฐ”์ธ๋”ฉ ๊ณผ์ •์—์„œ ์‹คํ–‰์€๋˜๋‚˜ ์‹ค์ œ๋กœ ๋ฐ”์ธ๋”ฉ๋œ ํ•จ์ˆ˜๋Š” ์—†๋‹ค.
      $button4.addEventListener("click", console.log(1));
    </script>
  </body>
</html>
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋Ÿฌํ„ฐํ‹ฐ์™€ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ, ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ •์˜ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ this๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ž์ฒด์˜ this ๋ฐ”์ธ๋”ฉ์„ ๊ฐ–์ง€ ์•Š๋Š”๋‹ค.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button>0</button>
  </body>
  <script>
    const $button = document.querySelector("button");
    
    // this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. <button>0</button>
    $button.addEventListener("click", function (e) {
      console.log(this);
    });

    // this๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. window
    $button.addEventListener("click", (e) => {
      console.log(this);
    });
  </script>
</html>
  • class์—์„œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๊ฒฝ์šฐ, ์ผ๋ฐ˜ ํ•จ์ˆ˜์˜ this๋Š” class๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚คํ‚ค ๋•Œ๋ฌธ์— ๋ณ„๋„๋กœ this(์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค)๋ฅผ bind ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ๋‹จ, ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ๋Š” ํ•จ์ˆ˜๊ฐ€ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ bind ๊ณผ์ •์ด ํ•„์š”์—†๋‹ค.
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button class="btn1">0</button>
    <button class="btn2">0</button>
    <button class="btn3">0</button>
    <script>
      class App {
        constructor() {
          this.$button1 = document.querySelector(".btn1");
          this.$button2 = document.querySelector(".btn2");
          this.$button3 = document.querySelector(".btn3");
          this.count1 = 0;
          this.count2 = 0;
          this.count3 = 0;

          this.$button1.onclick = this.increase1;

          // increase2 ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์˜ this๊ฐ€ ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•œ๋‹ค.
          this.$button2.onclick = this.increase2.bind(this);

          this.$button3.onclick = this.increase3;
        }

        increase1() {
          // ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ this๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•œ DOM ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
          // ์—ฌ๊ธฐ์„œ this๋Š” this.$button ์ด๋‹ค.
          console.log("increase1");
          this.$button1.textContent = ++this.count1;
        }

        increase2() {
          // this๋Š” ํด๋ž˜์Šค๊ฐ€ ์ƒ์„ฑํ•  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
          console.log("increase2");
          this.$button2.textContent = ++this.count2;
        }

        // increase3๋Š” ํ”„๋กœํ†  ํƒ€์ž…์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ธ์Šคํ„ด์Šค์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ ๋™์ž‘ํ•œ๋‹ค.
        increase3 = () => {
          // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ this๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
          console.log("increase3");
          this.$button3.textContent = ++this.count3;
        };
      }

      new App();
    </script>
  </body>
</html>

์ถœ์ฒ˜: ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive-์ด์›…๋ชจ

profile
Turtle Never stop

0๊ฐœ์˜ ๋Œ“๊ธ€