This - ์ฝ”๋“œ์ข…๐Ÿ””๋‹˜:)

๊น€๋ฏผ์žฌยท2021๋…„ 8์›” 15์ผ
0

TIL, Core JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
1/11
post-thumbnail

*๐Ÿ”Study Keyword :

This์™€๐Ÿ”‘ bind๐Ÿ—๏ธ ์ฐธ ์‰ฝ์ฃ ์ž‰!

-WHAT ISโ“

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  ์„ ์–ธํ•  ๋•Œ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ (๋Œ€ํ‘œ์ ์œผ๋กœ๋Š” ํด๋กœ์ €)์ด ์žˆ๊ณ 
    ํ˜ธ์ถœ ํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์˜ ๋Œ€ํ‘œ์ ์ธ ๋†ˆ(?)์ด this๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ 1> this์˜ ๊ฐ’(๋ฐ”์ธ๋”ฉ)์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์— ์˜ํ•ด ๊ฒฐ์ •๋˜์ง€๋งŒ
  • ํ•จ์ˆ˜์˜ this ๊ฐ’์ด ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ 2> this๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” bind ๋ฉ”์„œ๋“œ ๋…€์„(?)๋„ ์žˆ๋‹ค.

-HOW TO USEโ•โ“

1> this!

<script>
const someone = { // ๊ฐ์ฒด ์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ ์กด์žฌ
  name: 'jamie',
  whoAmI : function(){
  console.log(this)
  }
};
// Q1. whoAmI ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„?
someone.whoAmI();  // A1. someone, {name: "jamie", whoAmI: f}
</script>
  • A. 1๋ฒˆ> whoAmI() ํ˜ธ์ถœํ•œ ๋…€์„, this๋Š” ๋ฐ”๋กœ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ someone ๊ฐ์ฒด๋กœ
    1>๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœ ํ•˜์˜€๋‹ค.
    => ์ด์ฒ˜๋Ÿผ this๋Š” ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹, ์ฆ‰ ํ˜ธ์ถœ์„ ๋ˆ„๊ฐ€ ํ–ˆ๋Š๋ƒ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.
<script>
const someone = { // ๊ฐ์ฒด ์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ ์กด์žฌ
  name: 'jamie',
  whoAmI : function(){
  console.log(this)
  }
};
// Q2. myWhoAmI ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„?
const myWhoAmI = someone.whoAmI;
myWhoAmI(); // A2. window
</script>
  • A. 2๋ฒˆ> myWhoAmI()ํ˜ธ์ถœํ•œ ๋…€์„, this๋Š” ๋ฐ”๋กœ global ๊ฐ์ฒด, window๋กœ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜์—ฌ 2>์ผ๋ฐ˜ ํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•˜์˜€๋‹ค.
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>page title</title>
</head>
<body>
  <h1>JAMIE</h1>
  <Button id="btn"><h2>Hello</h2></Button>
  <script>
  const someone = { // ๊ฐ์ฒด ์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ ์กด์žฌ
    name: 'jamie',
    whoAmI : function(){
    console.log(this)
    }
  };
  const btn = document.getElementById('btn');
  // Q3. someone.whoAmI๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„?
  btn.addEventListener('click', someone.whoAmI); 
  // <Button id="btn"><h2>Hello</h2></Button>
  </script>
</body>
</html>
  • A. 3๋ฒˆ> HTML ๋ฌธ์„œ์— id 'btn'์˜ Button ํƒœ๊ทธ๋กœ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ someone.whoAmI๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„, this๋Š” ๋ฐ”๋กœ HTMLButtonElement(btn)์ด๋‹ค.
  • ์ด๋Š” btn์— someone์˜ whoAmI๊ฐ€ ์•„๋‹Œ whoAmI ํ•จ์ˆ˜๋งŒ ๋„˜.๊ธด.๊ฒƒ๊ณผ ๋™์ผํ•ด
    ์ฆ‰, btn.addEventListener('click', myWhoAmI), myWhoAmI ํ˜ธ์ถœํ•œ ๊ฒŒ ์•„๋‹Œ ๋„˜.๊ธด.๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.
    => ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„์€ btn์œผ๋กœ ํด๋ฆญ์‹œ ๋„˜๊ธด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ผ ๋ช…๋ น์„ ๋‚ด๋ฆฐ ๋†ˆ(?)์ด๋‹ค.

2> bind!

  • ๊ทธ๋Ÿฌ๋‚˜ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฌด๊ด€ํ•œ๊ฒŒ this๋ฅผ ๊ณ ์ •์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ ๋…€์„์ด bind์ด๋‹ค.
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>page title</title>
</head>
<body>
  <script>
    const someone = {
      name: 'jamie',
      whoAmI : function(){
      console.log(this)
      }
    };
    // Q4. bindWhoAmI ํ˜ธ์ถœํ•œ ๋…€์„์€?
    const bindWhoAmI = myWhoAmI.bind(someone)
    bindWhoAmI(); //  { name: "jamie", whoAmI: f}
    btn.addEventListener('click',bindWhoAmI);  // { name: "jamie", whoAmI: f}
     </script>
</body>
</html>
</head>
  • A. bindWhoAmI๋ฅผ ํ˜ธ์ถœํ•œ ๋…€์„์€ bind ๋ฉ”์„œ๋“œ๊ฐ€ ๋„˜๊ธด ์ธ์ž ๋…€์„(?)์œผ๋กœ ๋ฐ”๋กœ **someone ๊ฐ์ฒด๋‹ค.
  • bind ๋ฉ”์„œ๋“œ ๋…€์„์€ ํ˜ธ์ถœํ•œ ๋…€์„๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฌด์กฐ๊ฑด ์ธ์ž๋กœ ๋„˜๊ธด ๋…€์„์„ this๋กœ ๊ณ ์ •์‹œ์ผœ๋ฒ„๋ฆฐ๋‹ค.

#[CORE]

=> ๋Œ€์ฒด ๋ˆ„.๊ฐ€.ํ˜ธ.์ถœํ–ˆ์–ด?!

*๐Ÿ’กconclusion

  • ์ž๋ฐ”์Šคํฌ๋ฆฝ๋Š” ์„ ์–ธํ•  ๋•Œ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ๊ณผ ํ˜ธ์ถœ ํ•  ๋•Œ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด์žˆ๋Š”๋ฐ ์ด ํ˜ธ์ถœํ•  ๋•Œ ๊ฒฐ์ •๋˜๋Š” ๋…€์„์ด ๋ฐ”๋กœ this๋กœ ํ˜ธ์ถœํ•œ ๋†ˆ, ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์ด this๋ฅผ ์˜ˆ์™ธ์ ์œผ๋กœ ๋ฌถ์–ด์ค˜ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋…€์„์ด ๋ฐ”๋กœ bind์ด๋‹ค.

#๐Ÿ“‘Study Source

  1. ์ฝ”๋“œ์ข…๋‹˜ - https://www.youtube.com/watch?v=PAr92molMHU&t=310s
profile
์ž๊ธฐ ์‹ ๋ขฐ์˜ ํž˜์„ ๋ฏฟ๊ณ  ์‹ค์ฒœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.

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