250x250
Rainbow๐ŸŒˆCoder
My dev Note๐Ÿ“’
Rainbow๐ŸŒˆCoder
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (411)
    • ๊ณต์ง€์‚ฌํ•ญ (0)
    • Debugger (10)
      • Visual Studio Debugger (1)
      • Chrome DevTools (3)
      • Visual Studio Code Debugger (4)
      • eclipse (1)
      • intelliJ (1)
    • OOP (2)
      • OOP (2)
    • TypeScript (54)
      • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript (54)
    • Javascript (87)
      • Javascript (45)
      • Node.js (19)
      • React (5)
      • FE ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ค์ • (3)
      • React์™€ Node ๊ฐ™์ด ๋•Œ๋ ค์žก๊ธฐ (6)
      • next.js (2)
      • pixi.js (7)
    • ๋งˆํฌ์—… (23)
      • Html & Css (23)
    • C# (80)
      • C# (12)
      • ์ด๊ฒƒ์ด C#์ด๋‹ค (68)
    • C++ (30)
      • c++ (27)
      • win api (3)
    • Unity (18)
      • Unity(๊ธฐ์ดˆ) (8)
      • Unity(C#์ค‘๊ธ‰) (5)
      • ์œ ๋‹ˆํ‹ฐ ํฌํ†ค(๋„คํŠธ์›Œํฌ) (4)
      • unity c# MyCode (1)
    • Java & Spring (29)
      • Java (11)
      • ์Šคํ”„๋ง (8)
      • Java Algorithm (9)
      • Javs Data Structures (1)
    • ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (15)
      • ์ž๋ฃŒ๊ตฌ์กฐ (5)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
    • ํ˜•์ƒ๊ด€๋ฆฌ (15)
      • Git (11)
      • ์†Œ์ŠคํŠธ๋ฆฌ (3)
    • ๊ทธ๋ž˜ํ”ฝ์Šค (7)
      • WebGl (7)
    • AWS (3)
      • aws (3)
    • ๋ฆฌ๋ˆ…์Šค (5)
      • ๋ฆฌ๋ˆ…์Šค (5)
    • ์ฑ… ๋ฆฌ๋ทฐ (13)
      • ํด๋ฆฐ์ฝ”๋“œ(์ฑ…๋ฆฌ๋ทฐ) (3)
      • ์œ ์ง€๋ณด์ˆ˜๊ฐ€๋Šฅํ•œ์ฝ”๋”ฉ์˜๊ธฐ์ˆ C#ํŽธ(์ฑ…๋ฆฌ๋ทฐ) (1)
      • ๋ฆฌํŒฉํ† ๋ง(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํŒ) (9)
    • Server (2)
      • ๊ฒŒ์ž„ ์„œ๋ฒ„(๋„คํŠธ์›Œํฌ, ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ,OS) (2)
    • ์„ค๊ณ„, ์•„ํ‚คํ…์ณ (4)
    • ํŒŒ์ด์ฌ (5)
    • ๋””์ž์ธํŒจํ„ด (2)
    • mocha (2)
    • Jest (1)
    • Spine (1)
    • ์ธ๊ณต์ง€๋Šฅ (1)
      • ํ˜ผ์ž๊ณต๋ถ€ํ•˜๋Š”๋จธ์‹ ๋Ÿฌ๋‹+๋”ฅ๋Ÿฌ๋‹ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ์ปดํฌ์ง€์…˜
  • ์œ„์ž„
  • ใ…ฃใ„ท
  • MySQL

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Rainbow๐ŸŒˆCoder

My dev Note๐Ÿ“’

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ค‘๊ธ‰] call, apply, bind
Javascript/Javascript

[์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ค‘๊ธ‰] call, apply, bind

2022. 3. 28. 22:18
728x90

https://youtu.be/KfuyXQLFNW4

call, apply, bind

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹

function add(a: number, b: number): number {
  return a + b;
}
console.log(add(10, 20));
console.log(add.apply(null, [10, 20]));
console.log(add.call(null, 10, 20));
console.log(add.bind(null, 10, 20)());

call, apply, bind : ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹๊ณผ ๊ด€๊ณ„์—†์ด this๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ

javascript์˜ ํ•จ์ˆ˜๋Š” ๊ฐ์ž ์ž์‹ ๋งŒ์˜ this๋ผ๋Š” ๊ฒƒ์„ ์ •์˜ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ this๋Š” window์ด์ง€๋งŒ this๋Š” ๊ฐ์ฒด ๋‚ด๋ถ€, ๊ฐ์ฒด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์‹œ, ์ƒ์„ฑ์ž new ํ˜ธ์ถœ์‹œ, ๋ช…์‹œ์  bind์‹œ์— ๋”ฐ๋ผ ๋ฐ”๋€๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœํ–ˆ๋А๋ƒ์— ๊ด€๊ณ„์—†์ด this๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

call, apply, bind ๋Š” ํ•จ์ˆ˜์˜ this๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ”์ธ๋”ฉ ํ• ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ ์šฉํ•˜๋ฉด์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜์ด๊ณ , ํ˜•ํƒœ๋Š” ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋‹ˆ ์ต์ˆ™ํ•ด ์ง€๋„๋ก ํ•˜์ž

const mike = {
  name: "Mike",
};

const tom = {
  name: "Tom",
};

function showThisName() {
  console.log(this.name);
}

function updateBtith(birthYear, occupation) {
  this.birthYear = birthYear;
  this.occupation = occupation;
}

showThisName.call(mike);
showThisName.call(tom);

updateBtith.call(mike, 1999, "singer");
console.log(mike);
updateBtith.apply(tom, [1995, "programmer"]);
console.log(tom);
const nums = [3, 100, 12, 342, 2];
const minNum = Math.min(...nums);
const maxNum = Math.max(...nums);
console.log(minNum); //2
console.log(maxNum); //342

apply ์‘์šฉํ•ด๋ณด๊ธฐ

const nums = [3, 100, 12, 342, 2];
//const minNum = Math.min(...nums);
const minNum = Math.min.apply(null, nums);
//const maxNum = Math.max(...nums);
const maxNum = Math.max.apply(null, nums);
console.log(minNum); //2
console.log(maxNum); //342

call ์‘์šฉํ•ด๋ณด๊ธฐ

const nums = [3, 100, 12, 342, 2];
//const minNum = Math.min(...nums);
//const minNum = Math.min.apply(null, nums);
const minNum = Math.min.call(null, ...nums);
//const maxNum = Math.max(...nums);
//const maxNum = Math.max.apply(null, nums);
const maxNum = Math.max.call(null, ...nums);
console.log(minNum); //2
console.log(maxNum); //342

๊ฒฐ๊ตญ ์ค‘์š”ํ•œ ๊ฒƒ์€

apply์™€ call์˜ ๋™์ž‘ ๋ฐฉ์‹์€ ๊ฐ™์€๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ๋ฐฉ๋ฒ•๋งŒ ๋‹ค๋ฅผ ๋ฟ์ด๋‹ค.

bind

bindํ•จ์ˆ˜๊ฐ€ call, apply์™€ ๋‹ค๋ฅธ ์ ์€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์ด๋‹ค. ๋Œ€์‹  boundํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

const mimi = {
  name: "MiMi",
};

function update(birthYear, occupation) {
  this.birthYear = birthYear;
  this.occupation = occupation;
}

const updateMiMi = update.bind(mimi);
updateMiMi(1995, "artist");
console.log(mimi);
const user = {
  name: "Kara",
  lookName: function () {
    console.log(`hello, ${this.name}`);
  },
};

user.lookName(); //hello, Kara

let fn = user.lookName;
fn.call(user); //hello, Kara

fn.apply(user); //hello, Kara

let boundFn = fn.bind(user);
boundFn(); //hello, Kara

์ ์šฉ ์‚ฌ๋ก€

const say = function() {
  console.log(this); // ์—ฌ๊ธฐ์„œ this๋Š” ๋ญ˜๊นŒ?
  console.log("Hello, my name is " + this.name);
};

say();

sayํ•จ์ˆ˜์—์„œ Window๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค. ์ฆ‰, this๋ฅผ ๊ทธ๋•Œ ๊ทธ๋•Œ ์•Œ๋งž์€ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์„œ this๊ฐ’์— ๋”ฐ๋ผ ์ธ์‚ฌ๋ง์ด ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ this๋ฅผ bindingํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ์œ„์˜ this๋ฅผ Window๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜๊ฐ€ call, apply, bind์ด๋‹ค.

728x90

'Javascript > Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[๋“œ๋ฆผ์ฝ”๋”ฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋น„๋™๊ธฐ promise  (0) 2022.04.13
[๋“œ๋ฆผ์ฝ”๋”ฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]๋น„๋™๊ธฐ์˜ ์‹œ์ž‘ ์ฝœ๋ฐฑ์ง€์˜ฅ  (0) 2022.04.13
[๊ธฐ์ดˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋“œ๋ฆผ์ฝ”๋”ฉ by ์—˜๋ฆฌ๋‹˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ ๊ฐ•์˜ (ES5+) ์‹œ๋ฆฌ์ฆˆ ์ •์ฃผํ–‰ ๊ธฐ๋ก  (0) 2022.03.25
[์ค‘๊ธ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์‹ฌ๋ณผ  (0) 2022.03.24
[์ค‘๊ธ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด ์ฐธ์ดˆ, ๊ฐ์ฒด ๋ณต์‚ฌ, ๋ฐฐ์—ด ์ปจํŠธ๋กค ์‹ฌํ™”  (0) 2022.03.24
    'Javascript/Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [๋“œ๋ฆผ์ฝ”๋”ฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋น„๋™๊ธฐ promise
    • [๋“œ๋ฆผ์ฝ”๋”ฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]๋น„๋™๊ธฐ์˜ ์‹œ์ž‘ ์ฝœ๋ฐฑ์ง€์˜ฅ
    • [๊ธฐ์ดˆ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๋“œ๋ฆผ์ฝ”๋”ฉ by ์—˜๋ฆฌ๋‹˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ์ดˆ ๊ฐ•์˜ (ES5+) ์‹œ๋ฆฌ์ฆˆ ์ •์ฃผํ–‰ ๊ธฐ๋ก
    • [์ค‘๊ธ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ์‹ฌ๋ณผ
    Rainbow๐ŸŒˆCoder
    Rainbow๐ŸŒˆCoder
    ๋ชฐ๋ผ๋„ ๊ฒฐ๊ตญ์€ ์•„๋Š” ๊ฐœ๋ฐœ์ž, ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•œ ๋งค์ผ์˜ ํ•œ๊ฑธ์Œ

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”