Kimsoraโœจ
article thumbnail
320x100
๋ฐ˜์‘ํ˜•

 

๐Ÿ’กthis๋ž€?

ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๋™์ ์œผ๋กœ ๊ฒฐ์ •๋˜๋Š” ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ๋กœ '๋ˆ„๊ฐ€ ๋‚˜๋ฅผ ๋ถˆ๋ €๋Š๋ƒ'๋ฅผ ๋œปํ•œ๋‹ค๊ณ ํ•œ๋‹ค  ์ฆ‰, ์„ ์–ธ์ด ์•„๋‹Œ ํ˜ธ์ถœ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค

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

 

๐Ÿงฉ๋‹จ๋…์œผ๋กœ ์“ด this

์ „์—ญ ์‹คํ–‰์ปจํ…์ŠคํŠธ์˜ this, ์ฆ‰ ์•„๋ฌด ํ•จ์ˆ˜์—๋„ ์†ํ•˜์ง€ ์•Š์€ ๋ฒ”์œ„์—์„œ this๋Š” ์ „์—ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค

console.log(this); // window ๊ฐ์ฒด ์ถœ๋ ฅ

 

๐Ÿงฉํ•จ์ˆ˜ ์•ˆ์—์„œ ์“ด this

ํ•จ์ˆ˜ ์•ˆ์—์„œ this๋Š” ํ•จ์ˆ˜์˜ ์ฃผ์ธ์—๊ฒŒ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค  =>window๊ฐ์ฒด

 

โœ” ์ผ๋ฐ˜์ ์ธ  This

function myFunction() {
  return this;
}
console.log(myFunction()); //Window

โœ” strict mode This

"use strict";
 
function myFunction() {
  return this;
}
console.log(myFunction()); //undefined

 

 

๐Ÿงฉ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์“ด this

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ๋œ this๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒด๋กœ ๋ฐ”์ธ๋”ฉ๋œ๋‹ค

var person = {
  firstName: 'Kim',
  lastName: 'Sora',
  fullName: function () {
    return this.firstName + ' ' + this.lastName;
  },
};
 
person.fullName(); //"Sora Kim"

 

 

๐Ÿงฉ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์•ˆ์—์„œ ์“ด this

์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ DOM ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค=>์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๋Š” HTML ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค

<button id="myButton">Click me</button>
const myButton = document.querySelector("#myButton");

myButton.addEventListener("click", function() {
  console.log(this);
}); // myButton ์š”์†Œ ์ถœ๋ ฅ

 

๐Ÿงฉ๋ช…์‹œ์ ์œผ๋กœ this๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•  =>call, apply, bind ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ

 

โœ”๏ธcall

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ฃผ์ฒด์ธ ํ•จ์ˆ˜๋ฅผ  ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ

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

 

 

let person1 = {
    name: 'Koding'
};

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

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

// call()
person2.study.call(person1);//Koding์€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

person2.study()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด person2 ๊ฐ์ฒด์˜ study ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ, this.name์œผ๋กœ person2 ๊ฐ์ฒด์˜ name ํ”„๋กœํผํ‹ฐ ๊ฐ’์ธ 'Kim'์ด ์ถœ๋ ฅ๋œ๋‹ค

call ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ person2.study ๋ฉ”์„œ๋“œ๋ฅผ person1 ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•˜๋ฉด, study ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ this.name์œผ๋กœ ์ฐธ์กฐ๋˜๋Š” this๊ฐ€ person1 ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฏ€๋กœ, 'Koding'์ด ์ถœ๋ ฅ๋œ๋‹ค

 

โœ”๏ธApply

๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ฃผ์ฒด์ธ ํ•จ์ˆ˜๋ฅผ  ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ

argsArray: func์ด ํ˜ธ์ถœ๋˜์–ด์•ผ ํ•˜๋Š” ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด

 ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋„ฃ๊ฒŒ ๋œ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค(๋ฐฐ์—ด ๋˜๋Š” ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด)

fun.apply(thisArg, [argsArray])

 

function add(c, d) {
  return this.a + this.b + c + d;
}

let A = {a: 3, b: 3};

add.call(A, 6, 6); // 18

add.apply(A, [20, 10]); // 36

call์€ ์ธ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , apply๋Š” ์ธ์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค

๊ฐ์ฒด A๋ฅผ this๋กœ ์„ค์ •ํ•˜๋ฉด์„œ add ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , call์€ ์ธ์ˆ˜๋ฅผ ๊ฐ๊ฐ ์ „๋‹ฌํ•˜๊ณ  apply๋Š” ๋ฐฐ์—ด๋กœ ์ „๋‹ฌํ•œ๋‹ค

 

โœ”๏ธbind

ํ•จ์ˆ˜๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋„˜๊ฒจ๋ฐ›์€ ์ธ์ˆ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค

๋ฐ”์ธ๋”ฉํ•œ ํ•จ์ˆ˜๋Š” ์›๋ณธ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๊ฐ์‹ธ๋Š” ํ•จ์ˆ˜๋กœ์„œ call, apply์™€ ๊ฐ™์ด ํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” this๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์ง€๋งŒ ํ•ด๋‹น this๊ฐ€ ํ˜ธ์ถœ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค=> ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜์—ฌ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ

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

 

let person1 = {
    name: 'Koding'
};

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

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


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

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

person2 ๊ฐ์ฒด์˜ study() ๋ฉ”์†Œ๋“œ๋ฅผ person1 ๊ฐ์ฒด์— ๋ฐ”์ธ๋”ฉํ•˜๊ณ , student() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค

728x90
๋ฐ˜์‘ํ˜•
profile

Kimsoraโœจ

@sorarar

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!

๊ฒ€์ƒ‰ ํƒœ๊ทธ

WH