μΌ | μ | ν | μ | λͺ© | κΈ | ν |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- useEffect
- REACT
- CSS
- Flex
- λ°λΈμ½μ€
- useRef
- μ½λ©ν μ€νΈ
- position
- fetch API
- νλ‘κ·Έλλ¨Έμ€
- μλ°μ€ν¬λ¦½νΈ
- νλ‘ νΈμλ
- λΈλ‘κ·Έ
- Props
- λ°λΈμ½μ€3κΈ°
- float
- μκ³ λ¦¬μ¦
- history api
- Gatsby
- Today
- Total
Daehyunii's Dev-blog
19μ₯ νλ‘ν νμ λ³Έλ¬Έ
19μ₯ νλ‘ν νμ
Daehyunii 2022. 7. 13. 22:25μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ κΈ°λ°μ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄λ€. μλ°μ€ν¬λ¦½νΈλ κ°μ²΄ κΈ°λ°μ νλ‘κ·Έλλ° μΈμ΄μ΄λ©° μλ°μ€ν¬λ¦½νΈλ₯Ό μ΄λ£¨κ³ μλ κ±°μ 'λͺ¨λ κ²'μ΄ κ°μ²΄λ€.(μμ νμ μ κ° μ μΈ)
19.1 κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ νλ‘κ·Έλ¨μ λͺ λ Ήμ΄ λλ ν¨μμ λͺ©λ‘μΌλ‘ 보λ μ ν΅μ μΈ λͺ λ Ήν νλ‘κ·Έλλ°μ μ μ°¨μ§ν₯μ κ΄μ μμ λ²μ΄λ μ¬λ¬ κ°μ λ 립μ λ¨μ, μ¦ κ°μ²΄μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ νννλ €λ νλ‘κ·Έλλ° ν¨λ¬λ€μμ λ§νλ€. κ°μ²΄λ, μμ±μ ν΅ν΄ μ¬λ¬ κ°μ κ°μ νλμ λ¨μλ‘ κ΅¬μ±ν 볡ν©μ μΈ μλ£κ΅¬μ‘°μ΄λ©°, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ λ 립μ μΈ κ°μ²΄μ μ§ν©μΌλ‘ νλ‘κ·Έλ¨μ νννλ €λ νλ‘κ·Έλλ° ν¨λ¬λ€μμ΄λ€. κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κ°μ²΄μ μνλ₯Ό λνλ΄λ λ°μ΄ν°, νλ‘νΌν°μ μν λ°μ΄ν°λ₯Ό μ‘°μν μ μλ λμ, λ©μλλ₯Ό νλμ λ Όλ¦¬μ μΈ λ¨μλ‘ λ¬Άμ΄ μκ°νλ€. λ°λΌμ 볡ν©μ μΈ μλ£κ΅¬μ‘°λΌκ³ ν μ μλ€. κ° κ°μ²΄λ κ³ μ μ κΈ°λ₯μ κ°λ λ 립μ μΈ λΆνμΌλ‘ λ³Ό μ μμ§λ§ κ³ μ ν κΈ°λ₯μ μννλ©΄μ λ€λ₯Έ κ°μ²΄μ κ΄κ³μ±μ κ°μ§ μ μλ€. λ€λ₯Έ κ°μ²΄μ λ©μμ§λ₯Ό μ£Όκ³ λ°κ±°λ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μλ μλ€. λλ λ€λ₯Έ κ°μ²΄μ μν λ°μ΄ν°λ λμμ μμλ°μ μ¬μ©νκΈ°λ νλ€.
19.2 μμκ³Ό νλ‘ν νμ
μμμ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ ν΅μ¬ κ°λ μΌλ‘, μ΄λ€ κ°μ²΄μ νλ‘νΌν° λλ λ©μλλ₯Ό λ€λ₯Έ κ°μ²΄κ° μμλ°μ κ·Έλλ‘ μ¬μ©ν μ μλ κ²μ λ§νλ€. μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ μ κΈ°λ°μΌλ‘ μμμ ꡬννμ¬ κΈ°μ‘΄μ μ½λλ₯Ό μ κ·Ήμ μΌλ‘ μ¬μ¬μ©ν΄ λΆνμν μ€λ³΅μ μ κ±°νλ€.
function Circle(radius){
this.radius = radius;
this.getArea = function(){
return Math.PI * this.radius ** 2;
};
}
const circle1 = new Circle(1);
const circle2 = new Circle(2);
console.log(circle1.getArea === circle2.getArea) // false
console.log(circle1.getArea()); // 3.141592653589793
console.log(circle2.getArea()); // 12.566370614359172
console.log(circle1); // Circle {radius: 1, getArea: ƒ}
console.log(circle2); // Circle {radius: 2, getArea: ƒ}
μμ μ½λλ₯Ό 보면 μμ±μ ν¨μλ₯Ό ν΅ν΄ circle1, circle2 κ°μ²΄λ₯Ό μμ±νλ€. κ°κ°μ μΈμ€ν΄μ€λ νλ‘νΌν° κ°μ λ€λ₯΄μ§λ§ λμΌν getArea λ©μλλ₯Ό κ°μ κ°μ§κ³ μλ€. μ΄λ λ©λͺ¨λ¦¬λ₯Ό λΆνμνκ² λλΉνλ€. getArea λ©μλλ μΈμ€ν΄μ€λ€μ΄ λμΌν λ΄μ©μ λ©μλλ₯Ό μ¬μ©νλ―λ‘ λ¨ νλλ§ μμ±νμ¬ λͺ¨λ μΈμ€ν΄μ€κ° 곡μ ν΄μ μ¬μ©νλ κ²μ΄ λ°λμ§νλ€. μ΄λ μμμ ν΅ν΄ ν΄κ²°ν μ μλ€. μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ μ κΈ°λ°μΌλ‘ μμμ ꡬννλ€.
function Circle(radius){
this.radius = radius;
}
Circle.prototype.getArea = function(){
return Math.PI * this.radius ** 2
};
const circle1 = new Circle(1);
const circle2 = new Circle(2);
console.log(circle1.getArea === circle2.getArea) // true
console.log(circle1.getArea()); // 3.141592653589793
console.log(circle2.getArea()); // 12.566370614359172
console.log(circle1); // Circle {radius: 1}
console.log(circle2); // Circle {radius: 2}
μμ μ½λμ²λΌ Circle μμ±μ ν¨μκ° μμ±ν κ°μ²΄λ€μ Circle.prototypeμ νλ‘ν νμ μΌλ‘ κ°κ³ , μμ κ°μ²΄μΈ Circle.prototypeμ λͺ¨λ νλ‘νΌν°μ λ©μλλ₯Ό μμλ°λλ€. κ·Έλ¬λ―λ‘ Circle.prototypeμ getArea λ©μλλ₯Ό μΆκ°νμ¬ νμ κ°μ²΄λ€μ΄ λͺ¨λ μ¬μ©ν μ μκ² λ§λ€μ΄ μ½λμ μ€λ³΅μ μ κ±°ν μ μλ€.
19.3 νλ‘ν νμ κ°μ²΄
νλ‘ν νμ κ°μ²΄λ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ κ·Όκ°μ μ΄λ£¨λ κ°μ²΄ κ° μμμ ꡬννκΈ° μν΄ μ¬μ©λλ€. νλ‘ν νμ μ μ΄λ€ κ°μ²΄μ λΆλͺ¨ κ°μ²΄μ μν μ νλ κ°μ²΄λ‘μ λ€λ₯Έ κ°μ²΄μ 곡μ νλ‘νΌν°λ₯Ό μ 곡νλ€. νλ‘ν νμ μ μμλ°μ μμ κ°μ²΄λ λΆλͺ¨ κ°μ²΄μ νλ‘νΌν°λ₯Ό μμ μ νλ‘νΌν°μ²λΌ μμ λ‘κ² μ¬μ©ν μ μλ€. λͺ¨λ κ°μ²΄λ [[Prototype]] μ΄λΌλ λ΄λΆ μ¬λ‘―μ κ°μ§λ©°, μ΄ λ΄λΆ μ¬λ‘―μ κ°μ νλ‘ν νμ μ μ°Έμ‘°λ€.
[[Protoype]]μ μ μ₯λλ νλ‘ν νμ μ κ°μ²΄ μμ± λ°©μμ μν΄ κ²°μ λλ€. μ¦, κ°μ²΄κ° μμ±λ λ κ°μ²΄ μμ± λ°©μμ λ°λΌ νλ‘ν νμ μ΄ κ²°μ λκ³ [[Prototype]]μ μ μ₯λλ€. λͺ¨λ κ°μ²΄λ νλμ νλ‘ν νμ μ κ°λλ€. κ·Έλ¦¬κ³ λͺ¨λ νλ‘ν νμ μ μμ±μ ν¨μμ μ°κ²°λμ΄ μλ€. μ¦, κ°μ²΄μ νλ‘ν νμ κ³Ό μμ±μ ν¨μλ μλ‘ μ°κ²°λμ΄ μλ€. κ°μ²΄μ [[Prototype]] λ΄λΆ μ¬λ‘―μλ μ§μ μ κ·Όν μ μμ§λ§, __proto__μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ κ°μ²΄ μμ μ νλ‘ν νμ , μ¦ μμ μ [[Prototype]] λ΄λΆ μ¬λ‘―μ΄ κ°λ¦¬ν€λ νλ‘ν νμ μ κ°μ μ μΌλ‘ μ κ·Όν μ μλ€. κ·Έλ¦¬κ³ νλ‘ν νμ μ μμ μ constructor νλ‘νΌν°λ₯Ό ν΅ν΄ μμ±μ ν¨μμ μ κ·Όν μ μκ³ , μμ±μ ν¨μλ μμ μ prototype νλ‘νΌν°λ₯Ό ν΅ν΄ νλ‘ν νμ μ μ κ·Όν μ μλ€.
μ΄ λΆλΆμ΄ 곡λΆνλ©΄μ κ°μ₯ ν·κ°λ Έλ λΆλΆμ΄λ€. μ΄κ±Έ κ°λ°μμ κ΄μ μμ λ°λΌλ³΄λ©΄ μ΄ν΄κ° μ‘°κΈ λ μ¬μΈ μ μλ€. κ°λ°μμ κ΄μ μμ 보μλ©΄ νλ‘ν νμ μ μμ±λ€μ νμ κ°μ²΄κ° λ€ μ¬μ©ν μ μλ€. κ·Έλ λ€λ©΄ 'νλ‘ν νμ μ λ΄μ©μ νμΈνκ±°λ, λ΄μ©μ μΆκ°νκ³ μ νλ€λ©΄ μ΄λ»κ² ν΄μΌν κΉ?'
1. λͺ¨λ νλ‘ν νμ μ constructor νλ‘νΌν°λ₯Ό κ°μ§λ©°, constructor νλ‘νΌν°λ μμ±μ ν¨μλ₯Ό κ°λ¦¬ν¨λ€.
2. νλ‘ν νμ μ constructor νλ‘νΌν°κ° κ°λ¦¬ν€λ μμ±μ ν¨μλ [[construct]] λ΄λΆ λ©μλλ₯Ό κ°μ§λ 'constructor'μ΄κΈ° λλ¬Έμ prototype νλ‘νΌν°λ₯Ό κ°μ§λ€.
3. μμ±μ ν¨μμ prototype νλ‘νΌν°λ μμ±μ ν¨μμ μν΄ μμ±λ μΈμ€ν΄μ€μ νλ‘ν νμ μ κ°λ¦¬ν¨λ€. μ΄μ κ°μ²΄ μμ μ νλ‘ν νμ μ΄ λκ΅°μΈμ§ λͺ ννκ² μ μ μλ€. μ΄μ νλ‘ν νμ μ μ κ·Όνλ λ°©λ²μ 2κ°μ§κ° μλ€.
4. 첫 λ²μ§Έ λ°©λ²μ κ°μ²΄ μμ μ νλ‘ν νμ μ κ°λ¦¬ν€λ λ΄λΆ μ¬λ‘― [[Prototype]]μ μ§μ μ κ·Όν μ μμΌλ, __proto__μ κ·Όμ νλ‘νΌν°λ₯Ό μ΄μ©νμ¬ κ°μ²΄ μμ μ ν΅ν΄ κ°μ μ μΌλ‘ νλ‘ν νμ μ μ κ·Όν μ μλ€.
function Circle(radius){
this.radius = radius;
}
const circle1 = new Circle(1);
const circle2 = new Circle(2);
//circle1μ΄λΌλ κ°μ²΄μμ μ§μ __proto__μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ νλ‘ν νμ
μ μ κ·Όνμ¬ λ©μλ μΆκ°
circle1.__proto__.getArea = function(){
return Math.PI * this.radius ** 2
};
console.log(circle1.getArea === circle2.getArea) // true
console.log(circle1.getArea()); // 3.141592653589793
console.log(circle2.getArea()); // 12.566370614359172
console.log(circle1); // Circle {radius: 1}
console.log(circle2); // Circle {radius: 2}
5. λ λ²μ§Έ λ°©λ²μ νλ‘ν νμ μ΄ λκ΅°μΈμ§ κ°λ°μλ μκ³ μμΌλ, μμ±μ ν¨μλ₯Ό ν΅ν΄μ νλ‘ν νμ μ μ κ·Όνλ λ°©λ²μ΄λ€. λͺ¨λ μμ±μ ν¨μλ prototype νλ‘νΌν°λ₯Ό κ°μ§κ³ μκ³ , μμ±μν¨μ.prototypeμΌλ‘ μμ±μ ν¨μμ μν΄ λ―Έλμ μμ±λ κ°μ²΄μ νλ‘ν νμ μ μ κ·Όν μ μλ€.
function Circle(radius){
this.radius = radius;
}
//μμ±μ ν¨μμ prototype νλ‘νΌν°λ₯Ό ν΅ν΄ Circle μμ±μ ν¨μκ° μμ±ν κ°μ²΄μ νλ‘ν νμ
μ μ κ·Ό
Circle.prototype.getArea = function(){
return Math.PI * this.radius ** 2
};
const circle1 = new Circle(1);
const circle2 = new Circle(2);
console.log(circle1.getArea === circle2.getArea) // true
console.log(circle1.getArea()); // 3.141592653589793
console.log(circle2.getArea()); // 12.566370614359172
console.log(circle1); // Circle {radius: 1}
console.log(circle2); // Circle {radius: 2}
κ°μ₯ μ€μν κ²μ, κ°μ²΄μ νλ‘ν νμ κ³Ό μμ±μ ν¨μλ νλμ μΈνΈλΌλ κ²μ΄λ€.(Object.prototypeμ [[Prototype]]λ§ μ μΈ)
19.3.1 __proto__ μ κ·Όμ νλ‘νΌν°
λͺ¨λ κ°μ²΄λ __proto__ μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ μμ μ νλ‘ν νμ , μ¦ [[Prototype]] λ΄λΆ μ¬λ‘―μ κ°μ μ μΌλ‘ μ κ·Όν μ μλ€.
__proto__λ μ κ·Όμ νλ‘νΌν°λ€.
μμ λ°°μ λ―μ΄, λ΄λΆ μ¬λ‘―μ νλ‘νΌν°κ° μλλ€. κ·Έλ¬λ―λ‘ κ°μ²΄μ [[Prototype]] λ΄λΆ μ¬λ‘―μλ μ§μ μ κ·Όν μ μμΌλ©°, __proto__ μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ κ°μ μ μΌλ‘ [[Prototype]] λ΄λΆ μ¬λ‘―μ κ°, μ¦ κ°μ²΄μ νλ‘ν νμ μ μ κ·Όν μ μλ€. __proto__λ Object.prototypeμ μ κ·Όμ νλ‘νΌν°λ€. (μ΄ λν Object.prototypeμ΄ κ°λ¦¬ν€λ κ°μ²΄(νλ‘ν νμ )λ‘λΆν° μμλ°μ μ¬μ©νλ κ²μ΄λ€.)
__proto__μ κ·Όμ νλ‘νΌν°λ μμμ ν΅ν΄ μ¬μ©λλ€.
__proto__ μ κ·Όμ νλ‘νΌν°λ κ°μ²΄κ° μ§μ μμ νλ νλ‘νΌν°κ° μλλΌ Object.prototypeμ νλ‘νΌν°λ€. λͺ¨λ κ°μ²΄λ μμμ ν΅ν΄ Object.prototype.__proto__μ κ·Όμ νλ‘νΌν°λ₯Ό μ¬μ©ν μ μλ€. μ¦ Object.prototypeμ λͺ¨λ κ°μ²΄μ νλ‘ν νμ μ΄λ©° Object.prototypeμ __proto__μ κ·Όμ νλ‘νΌν°λ λͺ¨λ κ°μ²΄κ° μμλ°μ μ¬μ©ν μ μλ€.
__proto__μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ νλ‘ν νμ μ μ κ·Όνλ μ΄μ
[[Prototype]] λ΄λΆ μ¬λ‘―μ κ°, μ¦ νλ‘ν νμ μ μ κ·ΌνκΈ° μν΄ μ κ·Όμ νλ‘νΌν°λ₯Ό μ¬μ©νλ μ΄μ λ μνΈ μ°Έμ‘°μ μν΄ νλ‘ν νμ 체μΈμ΄ μμ±λλ κ²μ λ°©μ§νκΈ° μν΄μλ€. νλ‘ν νμ 체μΈμ λ¨λ°©ν₯ λ§ν¬λ 리μ€νΈλ‘ ꡬνλμ΄μΌ νλ€. κ·Έλ κΈ° λλ¬Έμ μν μ°Έμ‘°(κ°μ²΄λΌλ¦¬ μλ‘κ° μλ‘μ νλ‘ν νμ μ΄ λλ κ²½μ°)νλ νλ‘ν νμ 체μΈμ΄ λ§λ€μ΄μ§λ©΄ νλ‘ν νμ μ²΄μΈ μ’ μ μ΄ μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ νλ‘ν νμ 체μΈμμ νλ‘νΌν°λ₯Ό κ²μν λ 무ν 루νμ λΉ μ§λ€. μ΄λ° κ²½μ° __proto__μ κ·Όμ νλ‘νΌν°λ μλ¬λ₯Ό λ°μμν¨λ€.
const child = {};
const parent = {};
child.__proto__ = parent;
parent.__proto__ = child;
/* Uncaught TypeError: Cyclic __proto__ value
at set __proto__ [as __proto__] (<anonymous>) */
19.3.2 ν¨μ κ°μ²΄μ prototype νλ‘νΌν°
ν¨μ κ°μ²΄λ§μ΄ μμ νλ prototype νλ‘νΌν°λ μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€μ νλ‘ν νμ μ κ°λ¦¬ν¨λ€. λ°λΌμ μμ±μ ν¨μλ‘μ νΈμΆν μ μλ ν¨μ, non-constructorμΈ νμ΄ν ν¨μμ ES6 λ©μλ μΆμ½ ννμΌλ‘ μ μν λ©μλλ prototype νλ‘νΌν°λ₯Ό μμ νμ§ μμΌλ©° νλ‘ν νμ λ μμ±νμ§ μλλ€. μμ±μ ν¨μλ‘ νΈμΆνκΈ° μν΄ μ μνμ§ μμ μΌλ° ν¨μλ prototype νλ‘νΌν°λ₯Ό μμ νμ§λ§ κ°μ²΄λ₯Ό μμ±νμ§ μλ μΌλ° ν¨μμ prototype νλ‘νΌν°λ μλ¬΄λ° μλ―Έκ° μλ€. κ²°κ΅ λͺ¨λ κ°μ²΄κ° Object.prototypeμΌλ‘λΆν° μμλ°μ __proto__ μ κ·Όμ νλ‘νΌν°μ ν¨μ κ°μ²΄λ§μ΄ κ°μ§κ³ μλ prototype νλ‘νΌν°λ κ²°κ΅ λμΌν νλ‘ν νμ μ κ°λ¦¬ν¨λ€. μ΄λ€μ μ¬μ©νλ μ£Όμ²΄κ° λ€λ₯Ό λΏμ΄λ€.
19.3.3 νλ‘ν νμ μ constructor νλ‘νΌν°μ μμ±μ ν¨μ
λͺ¨λ νλ‘ν νμ μ constructor νλ‘νΌν°λ₯Ό κ°λλ€. μ΄ νλ‘νΌν°λ prototype νλ‘νΌν°λ‘ μμ μ μ°Έμ‘°νκ³ μλ μμ±μ ν¨μλ₯Ό κ°λ¦¬ν¨λ€. μ΄ μ°κ²°μ μμ±μ ν¨μκ° μμ€λ λ, μ¦ ν¨μ κ°μ²΄κ° μμ±λ λ μ΄λ€μ§λ€. μ΄λ₯Ό ν΅ν΄ νλ‘ν νμ κ³Ό μμ±μ ν¨μκ° μ°κ²° λλ κ²μ΄λ€. μ΄λ₯Ό μ‘°κΈ λ κΉκ² μκ°ν΄ 보면 νΉμ κ°μ²΄μ νλ‘ν νμ μ constructor νλ‘νΌν°λ₯Ό κ°μ§κ³ μκ³ , κ°μ²΄λ νλ‘ν νμ μ νλ‘νΌν°λ₯Ό μμλ°μ μ¬μ©ν μ μμΌλ―λ‘ (κ°μ²΄μμ μμ°Έμ‘°.constructor)λ₯Ό ν΅ν΄ μμ μ νλ‘ν νμ κ³Ό μ°κ²°λμ΄ μλ μμ±μ ν¨μλ₯Ό μ μ μμΌλ©°, ν΄λΉ μμ±μ ν¨μλ prototype νλ‘νΌν°λ₯Ό κ°μ§κ³ μκ³ ν΄λΉ (μμ±μν¨μ.prototype)μ ν΅ν΄ κ°μ²΄μ νλ‘ν νμ μ μ κ·Όν μ μλ€.
19.4 리ν°λ΄ νκΈ°λ²μ μν΄ μμ±λ κ°μ²΄μ μμ±μ ν¨μμ νλ‘ν νμ
리ν°λ΄ νκΈ°λ²μ λͺ μμ μΌλ‘ new μ°μ°μμ ν¨κ» μμ±μ ν¨μλ₯Ό νΈμΆνμ¬ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμ§λ§ 리ν°λ΄ νκΈ°λ²μ μν΄ μμ±λ κ°μ²΄λ λ¬Όλ‘ νλ‘ν νμ μ΄ μ‘΄μ¬νλ€. νμ§λ§ μ£Όμν΄μΌ ν μ μ 리ν°λ΄ νκΈ°λ²μ μν΄ μμ±λ κ°μ²΄μ κ²½μ° νλ‘ν νμ μ constructor νλ‘νΌν°κ° κ°λ¦¬ν€λ μμ±μ ν¨μκ° λ°λμ κ°μ²΄λ₯Ό μμ±ν μμ±μ ν¨μλΌκ³ λ¨μ ν μ μλ€.
//κ°μ²΄ 리ν°λ΄μ μν κ°μ²΄ μμ±κ³Ό κ°μ²΄μ μμ±μ ν¨μ
const child = {};
console.log(child.constructor); // ƒ Object() { [native code] }
//child κ°μ²΄μ νλ‘ν νμ
constructor νλ‘νΌν°λ₯Ό ν΅ν΄ μμ±μ ν¨μλ₯Ό μ μ μλ€.
μμ μ½λλ₯Ό ν΅ν΄ κ°μ²΄ 리ν°λ΄λ‘ μμ±ν κ°μ²΄μ νλ‘ν νμ μ Object.prototypeμ΄λΌλ κ²μ μ μ μλ€. νμ§λ§ κ°μ²΄ 리ν°λ΄μ μν΄ μμ±λ κ°μ²΄λ Object μμ±μ ν¨μκ° μμ±ν κ°μ²΄κ° μλλ€. 리ν°λ΄ νκΈ°λ²μ μν΄ μμ±λ κ°μ²΄λ μμμ μν΄ νλ‘ν νμ μ΄ νμνλ€. λ°λΌμ 리ν°λ΄ νκΈ°λ²μ μν΄ μμ±λ κ°μ²΄λ κ°μμ μΈ μμ±μ ν¨μλ₯Ό κ°λλ€. νλ‘ν νμ μ μμ±μ ν¨μμ λλΆμ΄ μμ±λλ©° prototypeνλ‘νΌν°μ νλ‘ν νμ μ constructor νλ‘νΌν°μ μν΄ μ°κ²°λμ΄ μκΈ° λλ¬Έμ΄λ€. β κ²°λ‘ μ μΌλ‘ νλ‘ν νμ κ³Ό μμ±μ ν¨μλ λ¨λ μΌλ‘ μ‘΄μ¬ν μ μκ³ μΈμ λ νλμ μμΌλ‘ μ‘΄μ¬νλ€.β
<리ν°λ΄ νκΈ°λ²μ μν΄ μμ±λ κ°μ²΄μ μμ±μ ν¨μμ νλ‘ν νμ >
리ν°λ΄ νκΈ°λ² | μμ±μ ν¨μ | νλ‘ν νμ |
κ°μ²΄ 리ν°λ΄ | Object | Object.prototype |
ν¨μ 리ν°λ΄ | Function | Function.prototype |
λ°°μ΄ λ¦¬ν°λ΄ | Array | Array.prototype |
μ κ· ννμ 리ν°λ΄ | RegExp | RegExp.prototype |
19.5 νλ‘ν νμ μ μμ± μμ
νλ‘ν νμ μ μμ±μ ν¨μκ° μμ±λλ μμ μ λλΆμ΄ μμ±λλ€. μμ±μ ν¨μλ μ¬μ©μκ° μ§μ μ μν μ¬μ©μ μ μ μμ±μ ν¨μμ μλ°μ€ν¬λ¦½νΈκ° κΈ°λ³Έ μ 곡νλ λΉνΈμΈ μμ±μ ν¨μλ‘ κ΅¬λΆν μ μλ€.
19.5.1 μ¬μ©μ μ μ μμ±μ ν¨μμ νλ‘ν νμ μμ± μμ
μμ±μ ν¨μλ‘μ νΈμΆν μ μλ constructor ν¨μλ ν¨μ μ μκ° νκ°λμ΄ ν¨μ κ°μ²΄λ₯Ό μμ±νλ μμ μ νλ‘ν νμ λ λλΆμ΄ μμ±λλ€.
console.log(Person.prototype); // {constructor: ƒ}
function Person(name){
// ν¨μ μ μΈλ¬ΈμΌλ‘ μ μλμκΈ° λλ¬Έμ νΈμ΄μ€ν
λμ΄ μλ°μ€ν¬λ¦½νΈ μμ§μ μν΄
// νκ°λ¨κ³μμ ν¨μμ΄λ¦κ³Ό λμΌν μλ³μκ° μ묡μ μΌλ‘ μμ±λκ³ Person ν¨μ κ°μ²΄κ° ν λΉλμ΄ μμ
// μ΄λ μμ±μ ν¨μμ prototype νλ‘νΌν°λ λλΆμ΄ μμ±λκ³ , μμ±λ νλ‘ν νμ
μ Person μμ±μ ν¨μμ
// prototype νλ‘νΌν°μ λ°μΈλ©λλ€.
this.name = name;
}
μ μ½λ μ²λΌ μμ±λ νλ‘ν νμ μ μ€μ§ constructor νλ‘νΌν°λ§ κ°μ§κ³ , νλ‘ν νμ λ κ°μ²΄μ΄κΈ° λλ¬Έμ νλ‘ν νμ μμ μ νλ‘ν νμ μ κ°μ§λ€. μμ±λ νλ‘ν νμ μ νλ‘ν νμ μ Object.prototypeμ΄ κ°λ¦¬ν€λ κ°μ²΄λ€. μ΄μ²λΌ μ¬μ©μ μ μ μμ±μ ν¨μλ μμ μ΄ νκ°λμ΄ ν¨μ κ°μ²΄λ‘ μμ±λλ μμ μ νλ‘ν νμ λ λλΆμ΄ μμ±λλ©°, μμ±λ νλ‘ν νμ μ νλ‘ν νμ μ μΈμ λ Object.prototypeμ΄λ€.
19.5.2 λΉνΈμΈ μμ±μ ν¨μμ νλ‘ν νμ μμ± μμ
λΉνΈμΈ μμ±μ ν¨μλ μΌλ° ν¨μμ λ§μ°¬κ°μ§λ‘ λΉνΈμΈ μμ±μ ν¨μκ° μμ±λλ μμ μ νλ‘ν νμ μ΄ μμ±λλ€. λͺ¨λ λΉνΈμΈ μμ±μ ν¨μλ μ μ κ°μ²΄(window,global)κ° μμ±λλ μμ μ μμ±λλ€. μμ±λ νλ‘ν νμ μ λΉνΈμΈ μμ±μ ν¨μμ prototype νλ‘νΌν°μ λ°μΈλ©λλ€.
κ²°λ‘ μ μΌλ‘ νλ‘ν νμ μ κ°μ²΄κ° μμ±λκΈ° μ΄μ μ μ΄λ―Έ κ°μ²΄νλμ΄ μ‘΄μ¬νλ€. μ΄ν μμ±μ ν¨μ λλ 리ν°λ΄ νκΈ°λ²μΌλ‘ κ°μ²΄λ₯Ό μμ±νλ©΄ νλ‘ν νμ μ μμ±λ κ°μ²΄μ [[Prototype]] λ΄λΆ μ¬λ‘―μ ν λΉλλ€. μ΄λ‘μ¨ μμ±λ κ°μ²΄λ νλ‘ν νμ μ μμλ°λλ€.
19.6 κ°μ²΄ μμ± λ°©μκ³Ό νλ‘ν νμ μ κ²°μ
19.6.1 κ°μ²΄ 리ν°λ΄μ μν΄ μμ±λ κ°μ²΄μ νλ‘ν νμ
κ°μ²΄ 리ν°λ΄μ μν΄ μμ±λλ κ°μ²΄μ νλ‘ν νμ μ Object.prototypeμ΄λ€. κ·Έλ¬λ―λ‘, Object.prototypeμ΄ κ°λ¦¬ν€λ κ°μ²΄κ° κ°μ§κ³ μλ νλ‘ν νμ κ³Ό λ©μλλ₯Ό κ°μ²΄ 리ν°λ΄μ μν΄ μμ±λλ κ°μ²΄λ λͺ¨λ μ¬μ©ν μ μλ€.
const child = { x: 1 };
console.log(child.constructor); // ƒ Object() { [native code] }
console.log(child.hasOwnProperty('x')); // true
// hasOwnPropertyλ©μλλ Object.prototypeμ΄ κ°λ¦¬ν€λ κ°μ²΄μ λ©μλλ€.
// μ¦, childκ°μ²΄μ νλ‘ν νμ
μ λ©μλλ€.
19.6.2 Object μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄μ νλ‘ν νμ
κ°μ²΄ 리ν°λ΄μ μν΄ μμ±λ κ°μ²΄μ λμΌν ꡬ쑰λ₯Ό κ°λλ€. μ¦, Object.prototypeμ΄ κ°λ¦¬ν€λ κ°μ²΄κ° Object μμ±μ ν¨μλ₯Ό ν΅ν΄ λ§λ κ°μ²΄μ νλ‘ν νμ μ΄λ€.
19.6.3 μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄μ νλ‘ν νμ
μμ±μ ν¨μμ μν΄ μμ±λ κ°μ²΄μ νλ‘ν νμ μ ν΄λΉ κ°μ²΄λ₯Ό λ§λ€μ΄ λΈ μμ±μ ν¨μμ prototype νλ‘νΌν°μ λ°μΈλ©λμ΄ μλ κ°μ²΄λ€.
function Person(name){
this.name = name;
}
const person1 = new Person('woo');
console.log(person1.constructor);
/*
ƒ Person(name){
this.name = name;
}
*/
console.log(person1.__proto__); // constructor: ƒ Person(name)
console.log(Person.prototype); // constructor: ƒ Person(name)
μ£Όμν΄μΌ ν μ μ νμ€ λΉνΈμΈ κ°μ²΄μΈ Object μμ±μ ν¨μμ λλΆμ΄ μμ±λ νλ‘ν νμ Object.prototypeμ λ€μν λΉνΈμΈ λ©μλλ₯Ό κ°μ§κ³ μμ§λ§, μ¬μ©μ μ μ μμ±μ ν¨μ Personκ³Ό λλΆμ΄ μμ±λ νλ‘ν νμ Person.prototypeμ νλ‘νΌν°λ constructorλΏμ΄λ€.
19.7 νλ‘ν νμ 체μΈ
μμμ μΈκΈνλ―μ΄, κ°μ²΄λ νλμ νλ‘ν νμ μ κ°μ§λλ° κ°μ²΄μ νλ‘ν νμ λ κ°μ²΄μ΄λ―λ‘ νλ‘ν νμ λ μμ μ νλ‘ν νμ μ κ°λλ€. νλ‘ν νμ μ νλ‘ν νμ μ μΈμ λ Object.prototypeμ΄λ€. μλ°μ€ν¬λ¦½νΈλ κ°μ²΄μ νλ‘νΌν°μ μ κ·Όνλ €κ³ ν λ ν΄λΉ κ°μ²΄μ μ κ·Όνλ €λ νλ‘νΌν°κ° μλ€λ©΄ [[Prototype]] λ΄λΆ μ¬λ‘―μ μ°Έμ‘°λ₯Ό λ°λΌ μμ μ λΆλͺ¨ μν μ νλ νλ‘ν νμ μ νλ‘νΌν°λ₯Ό μμ°¨μ μΌλ‘ κ²μνλ€. μ΄λ₯Ό νλ‘ν νμ 체μΈμ΄λΌ νλ€. κ·Έλ¬λ―λ‘ λͺ¨λ κ°μ²΄μ νλ‘ν νμ μ’ μ μ Object.prototypeμ΄κ³ Object.prototypeμ κ°μ²΄κ° κ°μ§κ³ μλ νλ‘νΌν°μ λ©μλλ€μ λͺ¨λ κ°μ²΄κ° μ΄μ©ν μ μλ κ²μ΄λ€.(__proto__μ κ·Όμ νλ‘νΌν° λ±) μ°Έκ³ λ‘ Object.prototypeμ νλ‘ν νμ , μ¦ [[Prototype]] λ΄λΆ μ¬λ‘―μ κ°μ nullμ΄λ€. νλ‘ν νμ 체μΈμ μ’ μ μΈ Object.prototypeμμλ νλ‘νΌν°λ₯Ό κ²μν μ μλ κ²½μ° undefinedλ₯Ό λ°ννλ€. μ΄λ μλ¬λ λ°μνμ§ μλλ€.
19.9 νλ‘ν νμ μ κ΅μ²΄
νλ‘ν νμ μ μμμ λ€λ₯Έ κ°μ²΄λ‘ λ³κ²½ν μ μλ€. μ΄κ²μ λΆλͺ¨ κ°μ²΄μΈ νλ‘ν νμ μ λμ μΌλ‘ λ³κ²½ν μ μλ€λ κ²μ μλ―Ένλ€.
19.9.1 μμ±μ ν¨μμ μν νλ‘ν νμ μ κ΅μ²΄
const Person = (function() {
function Person(name){
this.name = name;
}
Person.prototype = {
sayHello(){
console.log(`hi my name is ${this.name}`);
}
};
return Person;
}());
const me = new Person('lee');
me.sayHello(); // hi my name is lee
console.log(me.constructor); // ƒ Object() { [native code] }
μμ μ½λλ₯Ό 보면 Person.prototypeμ κ°μ²΄ 리ν°λ΄μ ν λΉνλ€. μ΄λ Person μμ±μ ν¨μκ° μμ±ν κ°μ²΄μ νλ‘ν νμ μ κ°μ²΄ 리ν°λ΄λ‘ κ΅μ²΄ν κ²μ΄λ€. νλ‘ν νμ μΌλ‘ κ΅μ²΄ν κ°μ²΄ 리ν°λ΄μλ constructor νλ‘νΌν°κ° μλ€. constructor νλ‘νΌν°λ μλ°μ€ν¬λ¦½νΈ μμ§μ΄ νλ‘ν νμ μ μμ±ν λ μ묡μ μΌλ‘ μΆκ°ν νλ‘νΌν°λ€. λ°λΌμ me κ°μ²΄μ μμ±μ ν¨μλ₯Ό κ²μνλ©΄ Personμ΄ μλλΌ νλ‘ν νμ 체μΈμ μν΄μ Objectκ° λμ¨λ€.
19.9.2 μΈμ€ν΄μ€μ μν νλ‘ν νμ μ κ΅μ²΄
νλ‘ν νμ μ μμ±μ ν¨μμ prototype νλ‘νΌν°λΏλ§ μλλΌ μΈμ€ν΄μ€μ Object.prototypeμΌλ‘λΆν° μμλ°μ__proto__μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ μ κ·Όν μ μλ€. λ°λΌμ μΈμ€ν΄μ€μ __proto__μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ νλ‘ν νμ μ κ΅μ²΄ν μ μλ€. μμ±μ ν¨μμ prototype νλ‘νΌν°μ λ€λ₯Έ μμμ κ°μ²΄λ₯Ό λ°μΈλ©νλ κ²μ λ―Έλμ μμ±ν μΈμ€ν΄μ€μ νλ‘ν νμ μ κ΅μ²΄νλ κ²μ΄λ€. __proto__μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ νλ‘ν νμ μ κ΅μ²΄νλ κ²μ μ΄λ―Έ μμ±λ κ°μ²΄μ νλ‘ν νμ μ κ΅μ²΄νλ κ²μ΄λ€. μμ±μ ν¨μμ μν νλ‘ν νμ κ΅μ²΄μ μΈμ€ν΄μ€μ μν νλ‘ν νμ κ΅μ²΄λ λ³λ€λ₯Έ μ°¨μ΄κ° μμ΄ λ³΄μ΄μ§λ§, λ―Έλ¬ν μ°¨μ΄κ° μ‘΄μ¬νλ€.
β μμ±μ ν¨μμ prototype νλ‘νΌν°λ₯Ό ν΅ν΄ κ΅μ²΄νλ κ²½μ° μμ±μ ν¨μμ prototypeμ κ΅μ²΄λ νλ‘ν νμ κ°μ²΄λ₯Ό κ°λ¦¬ν¨λ€.
β μΈμ€ν΄μ€μ __proto__ μ κ·Όμ νλ‘νΌν°λ₯Ό ν΅ν΄ κ΅μ²΄νλ κ²½μ° μμ±μ ν¨μμ prototypeμ κ΅μ²΄λ νλ‘ν νμ κ°μ²΄λ₯Ό κ°λ¦¬ν€μ§ μλλ€.
β κ΅μ²΄λ νλ‘ν νμ κ°μ²΄λ constructor νλ‘νΌν°λ₯Ό κ°μ§ μλλ€. (μ§μ μΆκ°ν΄μ μ°κ²°ν μλ μμ)
19.10 instanceof μ°μ°μ
instanceof μ°μ°μλ μ΄ν μ°μ°μλ‘ μ’λ³μ κ°μ²΄λ₯Ό κ°λ¦¬ν€λ μλ³μ, μ°λ³μ μμ±μ ν¨μλ₯Ό κ°λ¦¬ν€λ μλ³μλ₯Ό νΌμ°μ°μλ‘ λ°λλ€. λ§μ½ μ°λ³μ νΌμ°μ°μκ° ν¨μκ° μλ κ²½μ° TypeErrorκ° λ°μνλ€. μ°λ³μ μμ±μ ν¨μμ prototypeμ λ°μΈλ©λ κ°μ²΄κ° μ’λ³μ κ°μ²΄μ νλ‘ν νμ μ²΄μΈ μμ μ‘΄μ¬νλ©΄ trueλ‘ νκ°λκ³ , κ·Έλ μ§ μμ κ²½μ°μλ falseλ‘ νκ°λλ€.
//instace of μ°μ°μ
function Person(name){
this.name = name;
}
const me = new Person('lee');
console.log(me instanceof Person); // true
console.log(me instanceof Object); // ture
μ€μν μ μ instanceof μ°μ°μλ νλ‘ν νμ μ constructor νλ‘νΌν°κ° κ°μν€λ μμ±μ ν¨μλ₯Ό μ°Ύλ κ²μ΄ μλλΌ μμ±μ ν¨μμ prototypeμ λ°μΈλ©λ κ°μ²΄κ° νλ‘ν νμ μ²΄μΈ μμ μ‘΄μ¬νλμ§ νμΈνλ€λ κ²μ΄λ€.
19.12 μ μ νλ‘νΌν°/λ©μλ
μ μ νλ‘νΌν°/λ©μλλ μμ±μ ν¨μλ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ μ°Έμ‘°/νΈμΆν μ μλ νλ‘νΌν°/λ©μλλ₯Ό λ§νλ€.
//μ μ νλ‘νΌν°/λ©μλ
function Person(name){
this.name = name;
}
Person.prototype.sayHello = function(){
console.log(`hi ${this.name}`);
};
//μ μ νλ‘νΌν° μμ±
Person.staticprop = 'static prop';
//μ μ λ©μλ μμ±
Person.staticMethod = function(){
console.log('staticMethod');
};
const person1 = new Person('lee');
person1.sayHello(); // hi lee
console.log(Person.staticprop); // static prop
Person.staticMethod(); // staticMethod
console.log(person1.staticprop); // person1μ νλ‘ν νμ
체μΈμλ μλ νλ‘νΌν° μ΄λ―λ‘ undefined λ°ν
// person1.staticMethod(); // TypeError λ°μ
Person μμ±μ ν¨μλ κ°μ²΄μ΄λ―λ‘ μμ μ μ¨μ ν νλ‘νΌν°/λ©μλλ₯Ό μμ ν μ μλ€. Person μμ±μ ν¨μ κ°μ²΄κ° μμ ν νλ‘νΌν°/λ©μλλ₯Ό μ μ νλ‘νΌν°/λ©μλλΌ νλ€. μ μ νλ‘νΌν°/λ©μλλ μμ±μ ν¨μκ° μμ±ν μΈμ€ν΄μ€λ‘ μ°Έμ‘°/νΈμΆν μ μλ€. μλνλ©΄ μΈμ€ν΄μ€μ νλ‘ν νμ 체μΈμ λ€μ΄μλ νλ‘νΌν°/λ©μλκ° μλκΈ° λλ¬Έμ΄λ€. μ½κ² λ§ν΄ μμ±μ ν¨μλ κ°μ²΄μ΄λ―λ‘ μκΈ° μμ μ νλ‘νΌν°/λ©μλλ₯Ό μμ ν μ μκ³ , μμ±μ ν¨μ μμ μ΄ μμ ν νλ‘νΌν°/λ©μλλ₯Ό μ μ νλ‘νΌν°/λ©μλλΌκ³ λͺ λͺ ν κ²μ΄λ€.
μλ₯Ό λ€μ΄, Object.getOwnPropertyDescriptor λ©μλλ Object λΉνΈμΈ μμ±μ ν¨μμ μ μ λ©μλλ€. λ°λλ‘Object.prototype.hasOwnPropertyλ Object.prototype.__proto__λ©μλλ νλ‘ν νμ κ°μ²΄μ λ©μλλ€.
λ°λΌμ νκΈ°λ²λ§μΌλ‘λ μ μ νλ‘νΌν°/λ©μλμ νλ‘ν νμ νλ‘νΌν°/λ©μλλ₯Ό ꡬλ³ν μ μλ€.
19.13 νλ‘νΌν° μ‘΄μ¬ νμΈ
19.13.1 inμ°μ°μ
in μ°μ°μλ κ°μ²΄ λ΄μ νΉμ νλ‘νΌν°κ° μ‘΄μ¬νλμ§ μ¬λΆλ₯Ό νμΈνλ€. μ£Όμν΄μΌ ν μ μ in μ°μ°μλ νμΈ λμ κ°μ²΄μ νλ‘νΌν°λΏλ§ μλλΌ νμΈ λμ κ°μ²΄κ° μμλ°μ λͺ¨λ νλ‘ν νμ μ νλ‘νΌν°λ₯Ό νμΈνμ¬ λΆλ¦¬μΈκ°μΌλ‘ λ°ννλ€.
// in μ°μ°μλ‘ νλ‘νΌν° μ‘΄μ¬ νμΈ
const person = {
name : 'lee',
address : 'seoul'
};
console.log('name' in person); // true
console.log('address' in person); // true
console.log('age' in person); // false
console.log('__proto__' in person); // true (νλ‘ν μ²΄μΈ λ΄μ λͺ¨λ νλ‘νΌν°λ₯Ό κ²μν¨)
19.13.2 Object.prototype.hasOwnProperty λ©μλ(νλ‘ν νμ λ©μλλ€.)
Object.prototype.hasOwnProperty λ©μλλ μΈμλ‘ μ λ¬λ°μ νλ‘νΌν° ν€κ° κ°μ²΄ κ³ μ μ νλ‘νΌν° ν€μΈ κ²½μ°μλ§ trueλ₯Ό λ°ννλ€. μ¦, μμλ°μ νλ‘ν νμ μ νλ‘νΌν° ν€μΈ κ²½μ° falseλ₯Ό λ°ννλ€.
const person = {
name : 'lee',
address : 'seoul'
};
console.log(person.hasOwnProperty('name')); // true
console.log(person.hasOwnProperty('address')); // true
console.log(person.hasOwnProperty('age')); // false
console.log(person.hasOwnProperty('__proto__')); // false (ν΄λΉ κ°μ²΄ κ³ μ μ νλ‘νΌν°λ§ κ²μν¨)
19.14 νλ‘νΌν° μ΄κ±°
19.14.1 for...in λ¬Έ
κ°μ²΄μ λͺ¨λ νλ‘νΌν°λ₯Ό μννλ©° μ΄κ±°νλ €λ©΄ for...in λ¬Έμ μ¬μ©νλ€. for...in λ¬Έμ κ°μ²΄μ νλ‘νΌν° κ°μλ§νΌ μννλ©° for...in λ¬Έμ λ³μ μ μΈλ¬Έμμ μ μΈν λ³μμ νλ‘νΌν° ν€λ₯Ό ν λΉνλ€. μ£Όμν΄μΌ ν μ μ for...in λ¬Έμ in μ°μ°μμ λ§μ°¬κ°μ§λ‘ μν λμ κ°μ²΄μ νλ‘νΌν°λΏλ§ μλλΌ μμλ°μ νλ‘ν νμ μ νλ‘νΌν°κΉμ§ μ΄κ±°νλ€.(μ ννκ² λ§νμλ©΄ νλ‘ν νμ μ²΄μΈ λ΄μ νλ‘νΌν° μ€ [[Enumerable]]μ κ°μ΄ trueμΈ νλ‘νΌν°λ€λ§ μ΄κ±°νλ€.)κ·Έλ κΈ° λλ¬Έμ ν΄λΉ κ°μ²΄μ κ³ μ ν νλ‘νΌν°λ§ μννκ³ μ νλ€λ©΄, Object.prototype.hasOwnPropertyλ©μλλ₯Ό νμ©νμ¬ μ‘°κ±΄λ¬ΈμΌλ‘ κ³ μ ν νλ‘νΌν°λ§ 골λΌλ΄μΌ νλ€.
// for .. in λ¬ΈμΌλ‘ λͺ¨λ νλ‘νΌν° μννκΈ°
// for(λ³μ μ μΈ in κ°μ²΄){}
const man = {
name : 'lee',
address : 'seoul'
};
for(const key in man){
console.log(key + ':' + man[key]);
}
/*
name:lee
address:seoul
μμλ°μ νλ‘νΌν°λ€λ μννμ§λ§ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈμ Enumerableμ΄ falseμΈ κ²½μ°μλ μνλμ§ μλλ€.
*/
//boyκ°μ²΄μ κ³ μ ν νλ‘νΌν°λ€λ§ μννκΈ°
const boy = {
name : 'lee',
address : 'seoul',
__proto__ : {age : 20} // μ κ·Όμ νλ‘νΌν°λ₯Ό μ΄μ©ν΄μ μ§μ μμ
};
for(const key in boy){
if(!boy.hasOwnProperty(key)){
continue;
}
console.log(key + ':' + boy[key]);
}
/*
name:lee
address:seoul
*/
19.14.2 Object.keys/Object.values/Object.entries λ©μλ(Object μμ±μ ν¨μμ μ μ λ©μλλ€.)
for...in λ¬Έμ νμ©ν κ°μ²΄ μμ μ κ³ μ ν νλ‘νΌν°λ§ μννκΈ° μν λ°©λ²μ κ½€ λ²κ±°λ‘μ΄ λ°©λ²μ΄λ€. κ·Έλμ κ°μ²΄ μμ μ κ³ μ ν νλ‘νΌν°λ§ μ΄κ±°νκΈ° μν΄μλ for...in λ¬Έμ μ¬μ©νλ κ²λ³΄λ€Object.keys/Object.values/Object.entries λ©μλλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€. Object.keys μ μ λ©μλλ κ°μ²΄ μμ μ μ΄κ±° κ°λ₯ν κ³ μ μ νλ‘νΌν° ν€λ₯Ό λ°°μ΄λ‘ λ°ννλ€.
const girl = {
name : 'lee',
address : 'seoul',
__proto__ : {age : 20}
};
console.log(Object.keys(girl));
// ['name', 'address'] κ°μ²΄ μμ μ μ΄κ±°κ°λ₯ν κ³ μ μ νλ‘νΌν° ν€λ₯Ό μ΄κ±°
Object.values μ μ λ©μλλ κ°μ²΄ μμ μ μ΄κ±° κ°λ₯ν κ³ μ νλ‘νΌν° κ°μ λ°°μ΄λ‘ λ°ννλ€.
const girl = {
name : 'lee',
address : 'seoul',
__proto__ : {age : 20}
};
console.log(Object.values(girl));
// ['lee', 'seoul'] κ°μ²΄ μμ μ μ΄κ±° κ°λ₯ν κ³ μ μ νλ‘νΌν° κ°λ₯Ό μ΄κ±°
Object.entries μ μ λ©μλλ κ°μ²΄ μμ μ μ΄κ±° κ°λ₯ν κ³ μ νλ‘νΌν° ν€μ κ°μ μμ λ°°μ΄μ λ°°μ΄μ λ΄μ λ°ννλ€.
const girl = {
name : 'lee',
address : 'seoul',
__proto__ : {age : 20}
};
console.log(Object.entries(girl));
// [['name', 'lee'],['address', 'seoul']]
//κ°μ²΄ μμ μ μ΄κ±°κ°λ₯ν κ³ μ μ νλ‘νΌν° ν€μ κ°μ μμ λ°°μ΄μ λ°°μ΄μ λ΄μ λ°ν
'π Language & CS knowledge > JavaScript (λͺ¨λμλ°μ€ν¬λ¦½νΈ Deep Dive)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
21μ₯ λΉνΈμΈ κ°μ²΄ (0) | 2022.07.18 |
---|---|
20μ₯ strict mode (0) | 2022.07.16 |
18μ₯ ν¨μμ μΌκΈ κ°μ²΄ (0) | 2022.07.12 |
17μ₯ μμ±μ ν¨μμ μν κ°μ²΄ μμ± (0) | 2022.07.10 |
16μ₯ νλ‘νΌν° μ΄νΈλ¦¬λ·°νΈ (0) | 2022.07.08 |