Skip to content

Latest commit

Β 

History

History
86 lines (59 loc) Β· 2.85 KB

this.md

File metadata and controls

86 lines (59 loc) Β· 2.85 KB

this λž€ λ¬΄μ—‡μΈκ°€μš”?

  • This λŠ” μžμ‹ μ΄ μ†ν•œ 객체 λ˜λŠ” μžμ‹ μ΄ 생성할 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” 자기 μ°Έμ‘° λ³€μˆ˜ (self-referencing variable) μž…λ‹ˆλ‹€. λ”°λΌμ„œ this λ₯Ό 톡해 μžμ‹ μ΄ μ†ν•œ 객체 λ˜λŠ” μžμ‹ μ΄ 생성할 μΈμŠ€ν„΄μŠ€μ˜ ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό μ°Έμ‘° ν•  수 있게 λ©λ‹ˆλ‹€.
  • This λŠ” μ‹€μ œλ‘œ ν•¨μˆ˜ 호좜 μ‹œμ (λŸ°νƒ€μž„)에 κ²°μ •λ˜λ©°, 무엇을 κ°€λ¦¬ν‚¬μ§€λŠ” μ „μ μœΌλ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ μ½”λ“œμ— λ‹¬λ €μžˆμŠ΅λ‹ˆλ‹€.

즉 This λŠ” ν•¨μˆ˜ 자체λ₯Ό κ°€λ¦¬ν‚€κ±°λ‚˜, ν•¨μˆ˜μ˜ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό 가리킀지 μ•ŠμŠ΅λ‹ˆλ‹€. This λŠ” ν•¨μˆ˜ 호좜 방식에 λ”°λΌμ„œ λ™μ μœΌλ‘œ κ²°μ •λ˜κΈ° λ•Œλ¬Έμ—, ν•¨μˆ˜ μ„ μ–Έ μ‹œμ μ—λŠ” this κ°€ 무엇일지 μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ this λŠ” μ™œ ν•„μš”ν• κΉŒμš”?

this λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ '호좜 주체'λ₯Ό μ°ΎκΈ° μœ„ν•΄μ„œ ν•„μš”ν•˜λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

function identify() {
  return this.name;
}

function speak() {
  const greeting = `μ•ˆλ…• λ‚˜λŠ” ${identify.call(this)}`;
  console.log(greeting);
}

const coach1 = {
  name: "포비",
};

const coach2 = {
  name: "곡원",
};

speak.call(coach1); // μ•ˆλ…• λ‚˜λŠ” 포비
speak.call(coach2); // μ•ˆλ…• λ‚˜λŠ” 곡원

μœ„μ™€ 같은 μ½”λ“œμ—μ„œ this κ°€ μ—†λ‹€λ©΄ 일일이 context λ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ„˜κ²¨μ€˜μ•Ό ν•©λ‹ˆλ‹€.

function identify(context){
  return context.name;
}

function speak(context){
  const greeting = `μ•ˆλ…• λ‚˜λŠ” ${identify(context)}`;
  console.log(greeting);
}

const coach1 = {
  name: "포비";
}

const coach2 = {
  name: "곡원";
}

speak(coach1); // μ•ˆλ…• λ‚˜λŠ” 포비
speak(coach2); // μ•ˆλ…• λ‚˜λŠ” 곡원

즉 this λ₯Ό ν†΅ν•΄μ„œ ν•¨μˆ˜κ°€ μ μ ˆν•˜κ²Œ ν˜„μž¬ 싀행쀑인 객체λ₯Ό μžλ™μœΌλ‘œ μ°Έμ‘°ν•˜κ²Œ λ©λ‹ˆλ‹€.

this κ²°μ • 방법

κΈ°λ³Έ 바인딩

  • 기본바인딩은 아무것도 ν•˜μ§€ μ•Šμ•˜μ„ λ•Œ 전역객체가 λ°”μΈλ”©λ˜λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€.

μ•”μ‹œμ  바인딩

. 을 ν†΅ν•΄μ„œ ν˜ΈμΆœλΆ€ 객체에 λ”°λΌμ„œ λ°”μΈλ”©λ©λ‹ˆλ‹€.

λͺ…μ‹œμ  바인딩

call, apply, bind λ₯Ό ν†΅ν•΄μ„œ λͺ…μ‹œμ μœΌλ‘œ μžλ°”μŠ€ν¬λ¦½νŠΈμ—κ²Œ 직접 this 바인딩을 λͺ…μ‹œν•΄μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

new 바인딩

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ ν•¨μˆ˜ μ•žμ— new λ₯Ό λΆ™μ—¬ μƒμ„±μž ν˜ΈμΆœμ„ ν•˜λ©΄ μ•„λž˜μ™€ 같은 일이 μΌμ–΄λ‚©λ‹ˆλ‹€.

  1. μƒˆ 객체가 λ§Œλ“€μ–΄ μ§‘λ‹ˆλ‹€.
  2. μƒˆλ‘œ μƒμ„±λœ 객체의 [[Prototype]]이 μ—°κ²° λ©λ‹ˆλ‹€.
  3. μƒˆλ‘œ μƒμ„±λœ κ°μ²΄λŠ” ν•΄λ‹Ή ν•¨μˆ˜ 호좜 μ‹œ, this 둜 바인딩 λ©λ‹ˆλ‹€.
  4. 이 ν•¨μˆ˜κ°€ μžμ‹ μ˜ 또 λ‹€λ₯Έ 객체λ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ” ν•œ, new 와 ν•¨κ»˜ 호좜된 ν•¨μˆ˜λŠ” μžλ™μœΌλ‘œ μƒˆλ‘œ μƒμ„±λœ 객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. (μΈμŠ€ν„΄μŠ€ λ°˜ν™˜)
  5. 즉,μƒμ„±μž ν•¨μˆ˜λ‘œμ„œ 호좜 된 경우 λ‚΄λΆ€μ—μ„œμ˜ this λŠ” κ³§ μƒˆλ‘œ λ§Œλ“€ ꡬ체적인 μΈμŠ€ν„΄μŠ€ μžμ‹ μ΄ λ©λ‹ˆλ‹€
  • μš°μ„ μˆœμœ„λŠ” new > λͺ…μ‹œμ  > μ•”μ‹œμ  이 λ©λ‹ˆλ‹€.