-
๐์๋ฐ์คํฌ๋ฆฝํธ 5 | this, 5๊ฐ์ง ๋ฐ์ธ๋ฉ ํจํด์๋ฐ์คํฌ๋ฆฝํธ 2020. 7. 21. 18:27
this
let array = []; array.push(1); array.pop();
push, pop, shift, unshift ๋ฑ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ง์ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๋ค. ๋ฉ์๋๋ค์ ์์ ์ด ์ํ ๊ฐ์ฒด(๋ง์นจํ ์์ ๊ฐ์ฒด)์ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ๊ณ ๋ณ๊ฒฝํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ๊ณตํ๋ ๋ฉ์๋๋ค์ ์ด๋ฏธ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ ์๋ฅผ ํด๋์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ธ๋ค ์ฌ์ฉํ ์ ์๋ค.
function Example(){ this.storage = []; } Example.prototype.push = function(){ this.storage.push(1); return 1; }
Example ์์ฑ์ ํจ์๋ฅผ ์์ฑํ๋ค. push ๋ฉ์๋๋ storage์ 1์ ์ถ๊ฐํ๋ ๋ฉ์๋์ด๋ค.
์์ฑ์ ํจ์๋ก ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด new ์ฐ์ฐ์์ ํจ๊ป ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ ๋จ๊ณ๊ฐ ํ์ํ๋ค.
Example ์์ฑ์ ํจ์๋ฅผ ์ ์ํ ์์ ์์๋ ์ธ์คํด์ค๊ฐ ์์ง ์์ฑ๋๊ธฐ ์ ์ด๊ธฐ ๋๋ฌธ์ ์์ง ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ์์ง ๋ชปํ๋ค(array๋ฅผ ์ ์ํ๊ธฐ ์ ์ array.push๋ฅผ ์ฌ์ฉํ ์ ์๋ค).
๋๋ฌธ์ push ๋ฉ์๋๋ฅผ ์ ์ํ ๋ ์์ฑ์ ํจ์ ์์ ์๋ storage์ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋ ๊ฒ์ด๋ค.
Example.prototype.push = function(){ //example ์ ์๋์ด์๋ storage๋ฅผ ์ฐธ์กฐํ๊ณ ์ถ๋ค. => this.storage xxx.storage.push(1); }
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ ์์ ์ด ์์ฑํ ์ธ์คํด์ค, ์์ ์ด ์ํ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ํน์ํ ์๋ณ์์ธ this๋ฅผ ์ ๊ณตํ๋ค. push ๋ฅผ ๋ฉ์๋๋ฅผ ์ ์ํ ๋ this๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๊ฐ ์ํ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
this์ ๊ฐ์ ์ฌ๋ฌ๊ฐ์ง ํจํด์ ์ํด ๋ฐ์ธ๋ฉ(this๊ฐ ๊ฐ๋ฆฌํฌ ๊ฐ์ฒด๋ฅผ ์ธํ )๋๋ค. ์ฆ, ์ํฉ์ ๋ฐ๋ผ this๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ด ๋ฌ๋ผ์ง๋ค. ์์ ์์์ ๊ฒฝ์ฐ, ๋ฉ์๋ ์์ ๊ฐ์ฒด์ธ Example์ด ์๋์ผ๋ก this ๊ฐ์ผ๋ก ๋ฐ์ธ๋ฉ๋์๋ค.
5๊ฐ์ง ๋ฐ์ธ๋ฉ ํจํด
this ๋ฐ์ธ๋ฉ์ ํจ์ ํธ์ถ ๋ฐฉ์์ ๋ฐ๋ผ ๊ฒฐ์ ๋๋ค(= ํจ์ ํธ์ถ ์์ ์ ๊ฒฐ์ ).
1. Global
์ฝ์์ฐฝ์ this๋ฅผ ์กฐํํ๋ฉด window ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ ์ญ์์๋ this๋ ์ ์ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
2. ์ผ๋ฐ ํจ์ ํธ์ถ
ํจ์ ํธ์ถ ์ this๋ฅผ ์กฐํํ๋ฉด window ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ผ๋ฐ ํจ์ ๋ด๋ถ์์๋ this๋ ์ ์ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
์ค์ฒฉ ํจ์์ ํธ์ถ ์ญ์ ์ผ๋ฐ ํจ์ ํธ์ถ์ด๊ธฐ ๋๋ฌธ์ ์ ์ญ ๊ฐ์ฒด window ๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.
์ฝ๋ฐฑ ํจ์๊ฐ ์ผ๋ฐ ํจ์๋ก ํธ์ถ๋๋ค๋ฉด this์ ๊ฐ์ผ๋ก window ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ ๋๋ค.
ํ์ดํ ํจ์์ ๊ฒฝ์ฐ, ํจ์ ํธ์ถ ์ this๊ฐ ๋ฐ์ธ๋ฉ ๋๋ ์ผ๋ฐ ํจ์ ํธ์ถ๊ณผ ๋ค๋ฅด๊ฒ this๊ฐ์ด ์๋ค. ๋์ ํ์ดํ ํจ์๋ฅผ ๋๋ฌ์ธ๋ ๋ ์์ปฌ ๋ฒ์์ this(์์ ์ค์ฝํ๊ฐ this)๊ฐ ์ฌ์ฉ๋๋ค.
strict mode๊ฐ ์ ์ฉ๋ ์ผ๋ฐ ํจ์ ๋ด๋ถ์ this์๋ undefined๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.
3. method
๋ฉ์๋ ํธ์ถ ์ this๋ฅผ ์กฐํํ๋ฉด ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค. ๋ฉ์๋ ์ด๋ฆ ์์ ๋ง์นจํ(.) ์์ ๊ฐ์ฒด๊ฐ ๋ฐ์ธ๋ฉ๋๋ค.
ํ์ง๋ง ๋ฉ์๋๋ ๋ฐ์ธ๋ฉ๋ ๊ฐ์ฒด์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ค. ๊ทธ์ Example ํ๋กํผํฐ์ ํ ๋น๋๋ ๊ฒ์ด๋ค.
const Example = { storage : [], push(){ this.storage.push(1); return 1; } }
๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์์๋ ์ฌ์ฉํ ์ ์๋ค. ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์๋ ๊ฐ์ฒด์ ์๊ด์์ด ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ๋๋ค.
4. new ํค์๋
new ํค์๋๋ฅผ ์ฌ์ฉํ ์์ฑ์ ํธ์ถ ์, ์๋กญ๊ฒ ์์ฑ๋ ์ธ์คํด์ค ๊ฐ์ฒด๊ฐ this์ ๊ฐ์ผ๋ก ๋ฐ์ธ๋ฉ๋๋ค.
5. call, apply
call ๋๋ apply ํธ์ถ ์, ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ์ฒด๊ฐ this์ ๊ฐ์ผ๋ก ๋ฐ์ธ๋ฉ ๋๋ค.
[์ฐธ๊ณ ์๋ฃ]
ใใใใใ'์๋ฐ์คํฌ๋ฆฝํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐์๋ฐ์คํฌ๋ฆฝํธ 3 | Lexical Environment, Scope Chain (0) 2021.11.15 ๐์๋ฐ์คํฌ๋ฆฝํธ 2 | ์ค์ฝํ(scope), let vs var vs const (0) 2021.11.15 ๐์๋ฐ์คํฌ๋ฆฝํธ 1 | ๊ธฐ๋ณธํ ๋ฐ์ดํฐ์ ์ฐธ์กฐํ ๋ฐ์ดํฐ (0) 2021.11.13 ๐ ๋๊ธฐ์ ๋น๋๊ธฐ | Promises, callbacks, async/await (0) 2020.08.10