2025. 8. 19. 19:05ใFront-end/JavaScript

๋ชฉ์ฐจ
1. ์์ฑ์ ํจ์
2. new.target
3. ์์ฑ์ ํจ์์ return๋ฌธ
1. ์์ฑ์ ํจ์์ new ์ฐ์ฐ์
๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์ฌ์ฉํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ง๋ง, ์ ์ฌํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ผ ํ ๋๋ ์๋ค. (๋ณต์ ์ฌ์ฉ์, ๋ฉ๋ด ๋ด ์ฌ๋ฌ ์์ดํ
๋ฑ)
๊ทธ๋ด ๋๋ ์์ฑ์ ํจ์์ new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค.
์์ฑ์ ํจ์์ ์ผ๋ฐ ํจ์์ ๊ธฐ์ ์ ์ฐจ์ด๋ ์๋ค.
ํ์ง๋ง ์์ฑ์ ํจ์๋ 3๊ฐ์ง ๊ด๋ก๋ฅผ ๋ฐ๋ฅธ๋ค.
- ํจ์ ์ด๋ฆ์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์ํจ
- new ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ์ ํธ์ถํจ
- this.~~๋ก ํ๋กํผํฐ๋ฅผ ์์ฑํจ
function User(name) {
this.name = name;
this.isAdmin = false;
}
let user = new User("๋ณด๋ผ");
alert(user.name); // ๋ณด๋ผ
alert(user.isAdmin); // false
new User(...)๋ก ํจ์๋ฅผ ์คํํ๋ฉด ๋ค์์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ๋์ํ๋ค.
- ๋น ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด this์ ํ ๋น
- ํจ์ ๋ณธ๋ฌธ์ ์คํํ๊ณ , this์ ์๋ก์ด ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํด this๋ฅผ ์์
- this๋ฅผ ๋ฐํ
function User(name) {
// 1. this = {}; ๋น ๊ฐ์ฒด ์์ฑ
// 2. ์๋ก์ด ํ๋กํผํฐ๋ฅผ this์ ์ถ๊ฐ
this.name = name;
this.isAdmin = false;
// 3. return this; this๊ฐ ์์์ ์ผ๋ก ๋ฐํ๋จ
}
2. new.target
new.target ํ๋กํผํฐ๋ก ํจ์๊ฐ new์ ํจ๊ป ํธ์ถ๋์๋์ง ์ฌ๋ถ๋ฅผ ์ ์ ์๋ค.
์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ค๋ฉด new.target์ undefined๋ฅผ ๋ฐํํ์ง๋ง,
new์ ํจ๊ป ํธ์ถํ ๊ฒฝ์ฐ, ํจ์ ์์ฒด๋ฅผ ๋ฐํํ๋ค.
function User() {
alert(new.target);
}
User(); // undefined
new User(); // function User {...}
3. ์์ฑ์ ํจ์์ return๋ฌธ
์์ฑ์ ํจ์์๋ ๋ณดํต return๋ฌธ์ด ์๋ค.
๋ฐํํด์ผํ๋ ๊ฒ๋ค์ ๋ชจ๋ this์ ์ ์ฅ๋๊ณ , this๋ ์๋ ๋ฐํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ๋ง์ฝ return๋ฌธ์ ์์ฑํ๋ค๋ฉด ์๋์ ๊ฐ๋จํ ๊ท์น์ด ์ ์ฉ๋๋ค.
- ๊ฐ์ฒด๋ฅผ return ํ๋ค๋ฉด this ๋์ ๊ฐ์ฒด๊ฐ ๋ฐํ๋จ
- ์์ํ์ return ํ๋ค๋ฉด return๋ฌธ์ด ๋ฌด์๋จ
์ฆ, ์์ฑ์ ํจ์์์ return์ ๊ฐ์ฒดํ๋ง ๋ฐํํด์ค๋ค.
function BigUser() {
this.name = "์์ญ์ด";
return { name: "๊ณ ๋ฆด๋ผ" };
}
alert( new BigUser().name ); // ๊ณ ๋ฆด๋ผ
function SmallUser() {
this.name = "์์ญ์ด";
return; // <-- this๋ฅผ ๋ฐํํจ
}
alert( new SmallUser().name ); // ์์ญ์ด
์ฐธ๊ณ
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| B18 : Date ๊ฐ์ฒด (0) | 2025.08.20 |
|---|---|
| B17 : ์ฌ๋ณผ(Symbol) ํ์ (0) | 2025.08.20 |
| B15 : ๊ฐ์ฒด์ ๋ฉ์๋ (0) | 2025.08.19 |
| B14 : ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) (1) | 2025.08.19 |
| B15 : ๊ฐ์ฒด to ์์ ํ์ ๋ณํ (0) | 2025.08.19 |
GitHub