-
Prototype - AIπ€JavaScript 2023. 7. 15. 13:02
νλ‘ν νμ (Prototype)μ JavaScriptμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ μ€μν κ°λ μΌλ‘, κ°μ²΄λ€ κ°μ μμκ³Ό νλ‘ν νμ 체μ΄λμ κ°λ₯νκ² ν©λλ€. νλ‘ν νμ μ λͺ¨λ JavaScript κ°μ²΄κ° κ°μ§κ³ μλ μμ±μΌλ‘, ν΄λΉ κ°μ²΄μ λΆλͺ¨ μν μ νλ κ°μ²΄λ₯Ό κ°λ¦¬ν΅λλ€.
- νλ‘ν νμ
μ²΄μΈ (Prototype Chain):
- JavaScriptμ κ°μ²΄λ€μ νλ‘ν νμ κ³Ό μ°κ²°λ λ§ν¬ ꡬ쑰λ₯Ό κ°μ§λλ€.
- κ°μ²΄μ μμ± λλ λ©μλλ₯Ό μ°Ύμ λ ν΄λΉ κ°μ²΄μ νλ‘ν νμ μλ μλ€λ©΄, κ·Έ νλ‘ν νμ μ νλ‘ν νμ μ κ³μν΄μ νμνλ κ³Όμ μ λ§ν©λλ€. μ΄λ κ² μ¬λ¬ λ¨κ³μ νλ‘ν νμ μ΄ μ°κ²°λ κ΅¬μ‘°κ° νλ‘ν νμ 체μΈμ λλ€.
- μμ±μ ν¨μ (Constructor Function):
- κ°μ²΄λ₯Ό μμ±νκΈ° μν΄ μ¬μ©λλ ν¨μλ₯Ό λ§ν©λλ€.
- new ν€μλλ₯Ό μ¬μ©νμ¬ νΈμΆνλ©΄ ν΄λΉ μμ±μ ν¨μλ‘λΆν° μλ‘μ΄ μΈμ€ν΄μ€κ° μμ±λ©λλ€.
- νλ‘ν νμ
μμ±:
- λͺ¨λ ν¨μ κ°μ²΄λ prototype μμ±μ κ°μ§λ©°, μ΄ μμ±μ ν΄λΉ ν¨μλ‘λΆν° μμ±λ μΈμ€ν΄μ€μ μν(νλ‘ν νμ κ°μ²΄)μ κ°λ¦¬ν΅λλ€.
- **prototype**μ μΆκ°λ λ©μλμ μμ±μ ν΄λΉ μμ±μ ν¨μλ‘λΆν° μμ±λ λͺ¨λ μΈμ€ν΄μ€μμ 곡μ λ©λλ€.
- μ΅μ
λ 체μ΄λ (Optional Chaining):
- ES11(ES2020)μμ λμ λ λ¬Έλ²μΌλ‘, μ€μ²©λ κ°μ²΄μ μμ±μ μμ νκ² μ κ·ΌνκΈ° μν κΈ°λ₯μ λλ€.
- ?. μ°μ°μλ₯Ό μ¬μ©νμ¬ κ°μ²΄μ μ€μ²©λ μμ±μ νμΈνκ³ , ν΄λΉ μμ±μ΄ μ‘΄μ¬νμ§ μμ λ μλ¬λ₯Ό λ°©μ§νκ³ **undefined**λ₯Ό λ°νν©λλ€.
μμ:
// μμ±μ ν¨μ function Person(name) { this.name = name; } // Personμ prototypeμ λ©μλ μΆκ° Person.**prototype**.sayHello = function() { console.log(`Hello, my name is ${this.name}.`); }; // κ°μ²΄ μμ± const **person1** = new Person('Alice'); const **person2** = new Person('Bob'); // κ°μ²΄μμ λ©μλ νΈμΆ **person1.sayHello()**; // μΆλ ₯: "Hello, my name is Alice." **person2.sayHello();** // μΆλ ₯: "Hello, my name is Bob."
μ΄ μμμμ **Person.prototype.sayHello**λ Person μμ±μ ν¨μμ νλ‘ν νμ μ λ©μλλ₯Ό μΆκ°νκ³ , μ΄ λ©μλλ Person μμ±μλ‘λΆν° μμ±λ λͺ¨λ κ°μ²΄λ€μ΄ 곡ν΅μ μΌλ‘ μ¬μ©ν μ μμ΅λλ€. μ΄λ κ² νλ‘ν νμ μ μ¬μ©νμ¬ μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ λ©λͺ¨λ¦¬ ν¨μ¨μ λμΌ μ μμ΅λλ€.
νλ‘ν νμ μ JavaScriptμ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ ν΅μ¬μ μΈ κ°λ μ΄λ―λ‘, μ μ΄ν΄νκ³ νμ©νλ κ²μ΄ μ€μν©λλ€. νλ‘ν νμ κ³Ό νλ‘ν νμ 체μΈμ μ΄ν΄νλ©΄ JavaScript μ½λλ₯Ό λμ± ν¨μ¨μ μΌλ‘ μμ±ν μ μμ΅λλ€.
prototypeμ μ¬μ©νμ§ μμ κ²½μ°
Person κ°μ²΄ μ체μ sayHello λ©μλλ₯Ό μ§μ μΆκ°νλ κ²μ λλ€. μ΄λ κ² μ μλ λ©μλλ μμ±μ ν¨μ(Person)μλ§ μ§μ νΈμΆμ΄ κ°λ₯νκ³ , ν΄λΉ μμ±μλ‘ μμ±λ μΈμ€ν΄μ€μμλ μ§μ νΈμΆν μ μμ΅λλ€.
function Person(name) { this.name = name; } Person.sayHello = function() { console.log('Hello!'); }; **//μ§μ νΈμΆ** Person.sayHello(); // μΆλ ₯: "Hello! (Person object)" (Person.sayHello() νΈμΆ)
Prototypeμ μ¬μ© νλ©΄ Personμ λͺ¨λ μΈμ€ν΄μ€(person1, person2)μμ μ¬μ©μ΄ κ°λ₯νμ§λ§,
κ°μ²΄ μ체μ λ©μλλ₯Ό μ§μ μΆκ°ν μ΄μ κ°μ λ°©μμ μ§μ νΈμΆλ§ κ°λ₯ν΄ μ¬μ¬μ©μ΄ λΆκ°λ₯ν΄μ§λ€.
'JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
ES5 VS ES6 VS ES6+ μ°¨μ΄ - AIπ€ (0) 2023.07.15 - νλ‘ν νμ
μ²΄μΈ (Prototype Chain):