π‘ νλ‘ν νμ (Prototype)
JSμμ μΈμ€ν΄μ€λ€μ μνμ κ°λ¦¬ν΅λλ€.
π‘ νλ‘ν νμ κ°μ²΄ (Prototype Object)
μμ±μ ν¨μλ‘ μμ±ν μΈμ€ν΄μ€λ€μ μν (λΆλͺ¨) μ΄ λ κ°μ²΄μ λλ€.
prototype
μμ±μΌλ‘ μ°κ²°λμ΄ μμ΅λλ€.π‘ νλ‘ν νμ λ§ν¬ (Prototype Link)
νλ‘ν νμ μΈμ€ν΄μ€μ μνμ κ°λ¦¬ν΅λλ€.
__proto__
μμ±μΌλ‘ μ°κ²°λμ΄ μμ΅λλ€.console.log(μΈμ€ν΄μ€)
μ€ν μ [[Prototype]]
μ΄λΌλ μ΄λ¦μΌλ‘ μΆλ ₯λ©λλ€.π μ΅μνμ λ©λͺ¨λ¦¬λ‘ λΉμ·ν κ°μ²΄ μ¬λ¬ κ°λ₯Ό μμ½κ² μ°μ΄λ΄κ³ μΆμ λ μ¬μ©ν©λλ€.
λ©λͺ¨λ¦¬ μ¬μ© ν¨μ¨μ΄ μ¦κ°ν©λλ€.
μμ± / λ©μλλ₯Ό μμμμΌ μ¬μ¬μ©νκΈ° λλ¬Έμ
λλ€.
μ½λλ₯Ό κ°μ²΄μ§ν₯μ μΌλ‘ 지 μ μμ΄ κ°λ μ± / μ¬μ¬μ©μ± / μ μ§λ³΄μμ±μ΄ μ¬λΌκ°λλ€.
μμ±μ ν¨μ | μΈμ€ν΄μ€ | νλ‘ν νμ κ°μ²΄ | |
---|---|---|---|
νλ‘ν νμ
κ°μ²΄ μ κ·Ό λ°©λ² | prototype | __proto__ | __proto__ (λΆλͺ¨λ₯Ό κ°λ¦¬ν΄) |
μμ±μ ν¨μ μ κ·Ό λ°©λ² | constructor Object.getPrototypeOf( ) | constructor | |
μΈμ€ν΄μ€ μμ± λ°©λ² | new μμ±μ( ); |
μΈμ€ν΄μ€.constructor
λ μΈμ€ν΄μ€.[[Prototype]].constructor
μ λμΌνκ² μΈμλ©λλ€.
μΈμ€ν΄μ€μμλ Object.getPrototypeOf
λ₯Ό μ΄μ©ν΄ νλ‘ν νμ
μ μ κ·Όν μ μμ΅λλ€.
(Object.getPrototypeOf(μΈμ€ν΄μ€).constructor)(맀κ°λ³μ)
π‘ νλ‘ν νμ 체μ΄λ (Prototype Chaining)
__proto__ μμ±μ μ΄μ©ν΄ μμλ νλ‘ν νμ μ κ±°μ¬λ¬ μ¬λΌκ°λ©° μμ± / λ©μλλ₯Ό νμνλ κ²μ λ§ν©λλ€.
μ’ λ₯ | μ€λͺ |
---|---|
private μμ± | ν΄λ‘μ λ₯Ό μ΄μ©ν΄ μΊ‘μν/μλνν μμ±μ λλ€. |
public μμ± | μμ±μ ν¨μ μμμ this.μμ±λͺ μΌλ‘ μμ±ν μμ±μ λλ€. |
static μμ± | μμ±μ ν¨μμ μ§μ λΆμ¬ν μμ±μ
λλ€. μ£Όλ‘ μ€μ κ°μΌλ‘ μ¬μ©λ©λλ€. |
μ’ λ₯ | μ€λͺ | μμ |
---|---|---|
static λ©μλ | μΈμ€ν΄μ€λ₯Ό ν΅ν΄μλ μ κ·Όν μ μλ νλ‘ν νμ
λ©μλμ
λλ€. μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ°λ‘ μ¬μ©ν μ μμ΅λλ€. μ£Όλ‘ μμ μ νΈλ¦¬ν° ν¨μλ‘ μ¬μ©λ©λλ€. | Object.keys( ) |
prototype λ©μλ | μΈμ€ν΄μ€κ° μ§μ νΈμΆν μ μλ νλ‘ν νμ μ λ©μλμ λλ€. | user.__proto__.getName( ) user.getName( ) |
μΈμ€ν΄μ€ λ©μλ | νλ‘ν νμ μλ μλ μΈμ€ν΄μ€λ§μ λ©μλμ λλ€. | user.__proto__.getAge( ) β user.getAge( ) |
π Object
JSμ μ΅μμ νλ‘ν νμ μ λλ€.
JSλ νλ‘ν νμ
κΈ°λ° μΈμ΄μ
λλ€.
κ·Έλμ κΈ°λ³Έν λ°μ΄ν°λ§μ λ Object νλ‘ν νμ
μ μμλ°κ³ μμ΅λλ€.
μ΄ λλ¬Έμ κΈ°λ³Έν λ°μ΄ν°μμ κ°μ²΄ μ μ© λ©μλλ₯Ό μ¬μ©νμ§ λͺ»νκ² λ§κ³ μ prototype λ©μλ λμ static λ©μλλ‘ κ΅¬νν΄ λμμ΅λλ€.
β κ·Έ κ²°κ³Ό κ°μ²΄ μ μ© λ©μλλ₯Ό μ¬μ©νκΈ°κ° λ€μ λΆνΈν΄μ‘μ΅λλ€.
ex) Object.keys( ), Object.values( ), Object.entries( ), ...