Rainbow๐ŸŒˆCoder 2022. 7. 19. 01:37
728x90

 

this.x = 9;
var module = {
  x: 81,
  getX: function() { return this.x; }
};

module.getX(); // 81

var retrieveX = module.getX;
retrieveX();
// 9 ๋ฐ˜ํ™˜ - ํ•จ์ˆ˜๊ฐ€ ์ „์—ญ ์Šค์ฝ”ํ”„์—์„œ ํ˜ธ์ถœ๋์Œ

// module๊ณผ ๋ฐ”์ธ๋”ฉ๋œ 'this'๊ฐ€ ์žˆ๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜ ์ƒ์„ฑ
// ์‹ ์ž… ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ „์—ญ ๋ณ€์ˆ˜ x์™€
// module์˜ ์†์„ฑ x๋ฅผ ํ˜ผ๋™ํ•  ์ˆ˜ ์žˆ์Œ
var boundGetX = retrieveX.bind(module);
boundGetX(); // 81
this.name ='์†Œ๋ƒ';
let person1 = {
    name: '์•„๋ฌด๋ฌด'
};

let person2 = {
    name: '๋Ÿญ์Šค',
    study: function() {
        console.log(this.name + '์ด/๊ฐ€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.');
    }
};

person2.study(); // ๋Ÿญ์Šค์ด/๊ฐ€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

let fullStudy = person2.study;
fullStudy(); //์†Œ๋ƒ์ด/๊ฐ€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

// bind()
let student = person2.study.bind(person1);

student(); // ์•„๋ฌด๋ฌด์ด/๊ฐ€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

Bind


func.bind(thisArg[, arg1[, arg2[, ...]]])

  1. thisArg: ๋ฐ”์ธ๋”ฉ ํ•จ์ˆ˜๊ฐ€ ํƒ€๊ฒŸ ํ•จ์ˆ˜์˜ this์— ์ „๋‹ฌํ•˜๋Š” ๊ฐ’
  2. arg1, arg2, … : func์ด ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋Š” ์ธ์ˆ˜
  • bind()๋Š” ์ƒˆ๋กญ๊ฒŒ ๋ฐ”์ธ๋”ฉํ•œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค. ๋ฐ”์ธ๋”ฉํ•œ ํ•จ์ˆ˜๋Š” ์›๋ณธ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ธ๋Š” ํ•จ์ˆ˜์ด๋‹ค. bind()๋Š” call(), apply()์™€ ๊ฐ™์ด ํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” this๋ฅผ ๋ฐ”๊พธ์ง€๋งŒ ํ˜ธ์ถœ๋˜์ง€๋Š” ์•Š๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜์—ฌ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
 
 

Function.prototype.bind() - JavaScript | MDN

bind() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐ›๊ฒŒ๋˜๋Š” ์ฒซ ์ธ์ž์˜ value๋กœ๋Š” this ํ‚ค์›Œ๋“œ๋ฅผ ์„ค์ •ํ•˜๊ณ , ์ด์–ด์ง€๋Š” ์ธ์ž๋“ค์€ ๋ฐ”์ธ๋“œ๋œ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜์— ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

728x90