[JS] ๐Ÿ“ this โญ

Mec.D's Blogยท2022๋…„ 6์›” 1์ผ
0

JS ES6+ ๋น„๊ณต์‹ ๋…ธํŠธ

๋ชฉ๋ก ๋ณด๊ธฐ
12/17
post-thumbnail

๐Ÿ’ก this

JS์˜ this๋Š” ํ˜ธ์ถœ ์‹œ ๋™์ ์œผ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š”, ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ๋งฅ๋ฝ์ ์ธ ์†Œ์œ ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.


this๋ผ๋Š” ๋„ค์ด๋ฐ์ด ์ƒ๋‹นํžˆ ๋ถ€์ ์ ˆํ•˜๊ฒŒ ์ ์šฉ๋œ ์‚ฌ๋ก€๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ฐ”์ธ๋”ฉ ์‹œ์ 

๐ŸŒ  ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ Creation Phase

ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋  ๋•Œ๊ฐ€ ์•„๋‹Œ, ํ˜ธ์ถœ๋˜์–ด ์ฝœ ์Šคํƒ์— ์Œ“์ผ ๋•Œ Function.prototype.call ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ this๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
(ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ this๊ฐ€ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.)


ํ˜ธ์ถœ ๋ฐฉ์‹๋ณ„ this

ํ˜ธ์ถœ ๋ฐฉ์‹this์˜ˆ์‹œ์ถ”๊ฐ€ ์„ค๋ช…
์ „์—ญ ๊ณต๊ฐ„์—์„œ ํ˜ธ์ถœ
(or ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ)
์ „์—ญ ๊ฐ์ฒด
(Window / global)
printThis( );
๋ฉ”์„œ๋“œ ํ˜•ํƒœ๋กœ ํ˜ธ์ถœ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฐ์ฒดobj.printThis( );
Callback์œผ๋กœ ํ˜ธ์ถœHoF ํ•จ์ˆ˜์˜
๋‚ด๋ถ€ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋ฐ”๋€œ
(๊ธฐ๋ณธ๊ฐ’ : ์ „์—ญ ๊ฐ์ฒด)
hoF(printThis);์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธธ ๋•Œ
.bind( ) ํ•จ์ˆ˜๋กœ
this๋ฅผ ๊ณ ์ •์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒ์„ฑ์žํ•จ์ˆ˜ ํ˜ธ์ถœ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์งˆ ์ธ์Šคํ„ด์Šค
(๊ฐ์ฒด)
function User( ) {
ย ย this.age = 20;
ย ย console.log(this);
};
new User( );
new ์—ฐ์‚ฐ์ž๊ฐ€
์ƒˆ๋กœ ๋งŒ๋“ค์–ด์งˆ ๊ฐ์ฒด๋ฅผ
this๋กœ ๋ฐ”์ธ๋”ฉ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €์™€ Node์˜ this ์ฐจ์ด

๋ธŒ๋ผ์šฐ์ €Node
์ตœ์ƒ์œ„ thisWindowmodule.exports
ํ•จ์ˆ˜ ๊ธฐ๋ณธ thisWindowglobal
์ „์—ญ๋ณ€์ˆ˜ ํฌํ•จโœ…โŒ

this๋ฅผ ๊ณ ์ •์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

  1. call, apply, bind ํ•จ์ˆ˜ ์‚ฌ์šฉ
    ๐Ÿ‘‰ call, apply๋Š” ํ•จ์ˆ˜ ์‹คํ–‰๊ณผ ๋™์‹œ์— ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์— ์ผํšŒ์„ฑ์œผ๋กœ ์›ํ•˜๋Š” this๋ฅผ ์ฃผ์ž…ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

    ๐Ÿ‘‰ bind๋Š” ์‹คํ–‰์€ ๋˜์ง€ ์•Š์œผ๋‚˜, ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ this๋ฅผ ๊ณ ์ •์‹œ์ผœ ์ค๋‹ˆ๋‹ค. ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

  2. ํด๋กœ์ € ํ™œ์šฉ
    ์ƒ์œ„ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜ (self, _this, that ๋“ฑ) ์— this๋ฅผ ํ• ๋‹นํ•œ ๋’ค ํ•˜์œ„ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—์„œ ํด๋กœ์ € ํ˜•ํƒœ๋กœ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ
    ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” this๋ฅผ ๊ฐ–์ง€ ์•Š์œผ๋ฏ€๋กœ ์Šค์ฝ”ํ”„ ์ฒด์ด๋‹์ด ์ผ์–ด๋‚˜ ํด๋กœ์ € ํ˜•ํƒœ๋กœ ์ƒ์œ„ ์ปจํ…์ŠคํŠธ์˜ this๋ฅผ ๊ฐ€์ ธ๋‹ค ์”๋‹ˆ๋‹ค.

profile
๊ธฐ์ˆ ๋กœ ๋” ๋‚˜์€ ๋ฏธ๋ž˜๋ฅผ ๋””์ž์ธํ•˜๋Š” ๊ฐœ๋ฐœ์ž MEC:D ์ž…๋‹ˆ๋‹ค

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