[Javascript] this

[์›๋ณธ ๋งํฌ]

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ this๋Š” ์ฐธ์œผ๋กœ ๋ฏธ๋ฌ˜ํ•œ ๋…€์„์ด๋‹ค.
๊ธฐํƒ€ OOP ์–ธ์–ด๋“ค์—์„œ ์‚ฌ์šฉ๋˜๋Š” this์™€ ๋™์ž‘๋ฐฉ์‹์ด ์‚ฌ๋ญ‡ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์‹ฌ์ง€์–ด ๋ธŒ๋ผ์šฐ์ € this์™€ Node์˜ this๊ฐ€ ๋˜ ๋‹ค๋ฅด๋‹ค!
ํ™˜์žฅํ•  ๋…ธ๋ฆ‡์ด๋‹ค.

์ผ๋‹จ, ์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ๋“ค์„ ์ œ์™ธํ•˜๋ฉด this๋Š” ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๊ธด ํ•œ๋ฐ...
์•„๋ฌดํŠผ ๊ทธ ์ „์—ญ ๊ฐ์ฒด๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ์šฐ์—๋Š” window๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค์งœ๊ณ ์งœ this๋ฅผ ์ฐ์–ด๋ณด๋ฉด window ๊ฐ์ฒด๊ฐ€ ์ฐํžŒ๋‹ค.

๊ทผ๋ฐ ๋…ธ๋“œ๋Š” ์ข€ ๋‹ค๋ฅด๋‹ค. ๋…ธ๋“œ์—๋Š” ์ผ๋‹จ window๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
์šฐ์„  ์ฐ์–ด๋ณด์ž

์Œ? ๋นˆ ๊ฐ์ฒด๊ฐ€ ๋‚˜์™”๋‹ค.
์ €๊ฒŒ ๋Œ€์ฒด ๋ญ˜๊นŒ?
์‚ฌ์‹ค node์˜ ์ „์—ญ ๊ฐ์ฒด๋Š” ๋ชจ๋“ˆ ๋‚ด๋ณด๋‚ผ๋•Œ ์“ฐ๋Š” module.exports๋‹ค.
๊ทธ๋ž˜์„œ ๋ญ˜ ๋‚ด๋ณด๋‚ด๊ณ  ์ฐ์–ด๋ณด๋ฉด

์ œ๋Œ€๋กœ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ์—” ์ „์—ญ ํ•จ์ˆ˜๋“ค์„ ๊ฐ€์ง€๋Š” ์ „์—ญ๊ฐ์ฒด๊ฐ€ ์ฐํžŒ๋‹ค.

๊ทผ๋ฐ this๊ฐ€ ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š” ์˜ˆ์™ธ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๊ณ  ํ–ˆ๋‹ค.
์‚ฌ์‹ค... this๋Š” ๋ฌธ๋งฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ๋†ˆ์ด๋‹ค.
๋งŒ์•ฝ ์–ด๋–ค ํ•จ์ˆ˜๋ฅผ ์ „์—ญํ•จ์ˆ˜๋กœ์„œ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด, ๊ทธ๊ฑด '์ „์—ญ'ํ•จ์ˆ˜์ด๋‹ˆ ์œ„์™€ ๊ฐ™์ด ์ „์—ญ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ๊ทธ ํ•จ์ˆ˜๋ฅผ ์–ด๋–ค ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์ฒ˜๋Ÿผ ํ˜ธ์ถœํ•œ๋‹ค๋ฉด, ๊ทธ๊ฑด ๊ทธ '๊ฐ์ฒด'๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.



๊ฐ์ฒด ์ƒ์„ฑ(new)

๊ทธ๋ฆฌ๊ณ  new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•  ๋•Œ์™€ ์•„๋‹ ๋•Œ๊ฐ€ ๋˜ ๋‹ฌ๋ผ์ง„๋‹ค!
new ํ‚ค์›Œ๋“œ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๊ทธ ์•ˆ์˜ this๋Š” ์ƒ์„ฑ๋ผ์„œ ๋ฐ˜ํ™˜๋  ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.



ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

๊ฒŒ๋‹ค๊ฐ€ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์™€ ์ผ๋ฐ˜ ํ•จ์ˆ˜(function)์˜ this๊ฐ€ ๋˜ ๋‹ค๋ฅด๋‹ค.
์ฐธ์œผ๋กœ ํ™˜์žฅํ•  ๋…ธ๋ฆ‡์ด๋‹ค.
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ๋ฌธ๋งฅ์ด ์•„๋‹Œ ์Šค์ฝ”ํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ this๋ฅผ ํ• ๋‹นํ•œ๋‹ค.
ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ this๋Š” ํ•ญ์ƒ ์ƒ์œ„ ์Šค์ฝ”ํ”„์˜ this๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ๋Š” ์ƒ์œ„ ์Šค์ฝ”ํ”„์ธ ์ „์—ญ, module.exports๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๊ฐ์ฒด์— ๋ผ์›Œ๋„ฃ์–ด์„œ ํ˜ธ์ถœํ•ด๋„ this๊ฐ€ ๋ฐ”๋€Œ์ง„ ์•Š๋Š”๋‹ค. ์ƒ์„ฑ์ž๋กœ๋„ ๋ชป ์“ฐ๊ณ ...

๊ทธ๋ž˜์„œ ์‚ฌ์‹ค ํ™”์‚ดํ‘œํ•จ์ˆ˜๋Š” ๊ทธ๋ƒฅ this๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์“ฐ๋ฉด ๋œ๋‹ค.


์ฐธ์กฐ
https://blueshw.github.io/2018/03/12/this/
https://www.zerocho.com/category/NodeJS/post/5b67e8607bbbd3001b43fd7b
https://www.zerocho.com/category/JavaScript/post/5b0645cc7e3e36001bf676eb