B16 : ์ƒ์„ฑ์ž ํ•จ์ˆ˜์™€ new ์—ฐ์‚ฐ์ž

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(...)๋กœ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ์™€ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋™์ž‘ํ•œ๋‹ค.

  1. ๋นˆ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด this์— ํ• ๋‹น
  2. ํ•จ์ˆ˜ ๋ณธ๋ฌธ์„ ์‹คํ–‰ํ•˜๊ณ , this์— ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด this๋ฅผ ์ˆ˜์ •
  3. 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 );  // ์›์ˆญ์ด

 

 

 

 

 

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•