JS Prototype
Table of contents
- ìë°ì€í¬ëŠœížì íë¡í íì
(Prototype)
- ìì곌 íë¡í íì
- íë¡í íì ê°ì²Ž
- 늬í°ëŽ íêž°ë²ì ìíŽ ìì±ë ê°ì²Žì ìì±ì íšìì íë¡í íì
- íë¡í íì ì ìì± ìì
- ê°ì²Ž ìì± ë°©ì곌 íë¡í íì ì ê²°ì
- íë¡í íì 첎ìž
- ì€ë²ëŒìŽë©ê³Œ íë¡íŒí° ìëì
- íë¡í íì ì êµì²Ž
- instanceof ì°ì°ì
- ì§ì ìì
- ì ì íë¡íŒí°/ë©ìë
- íë¡íŒí° ì¡Žì¬ íìž
- íë¡íŒí° ìŽê±°
- reference
ìë°ì€í¬ëŠœížì íë¡í íì (Prototype)
ìë°ì€í¬ëŠœížë íë¡í íì ì êž°ë°ìŒë¡ ììì 구ííì¬ ë¶íìí ì€ë³µì ì ê±°íë€. ì€ë³µì ì ê±°íë ë°©ë²ì êž°ì¡Žì ìœë륌 ì ê·¹ì ìŒë¡ ì¬ì¬ì©íë ê²ìŽë€. ìœë ì¬ì¬ì©ì ê°ë° ë¹ì©ì íì í ì€ìŒ ì ìë ì ì¬ë ¥ìŽ ììŒë¯ë¡ ë§€ì° ì€ìíë€.
ìë°ì€í¬ëŠœížë íë¡í íì (prototype)ì êž°ë°ìŒë¡ ììì 구ííë€.
ìì곌 íë¡í íì
ìì(inheritance)ì ê°ì²Žì§í¥ íë¡ê·žëë°ì íµì¬ ê°ë ìŒë¡, ìŽë€ ê°ì²Žì íë¡íŒí° ëë ë©ìë륌 ë€ë¥ž ê°ì²Žê° ììë°ì ê·žëë¡ ì¬ì©í ì ìë ê²ì ë§íë€.
ììì ìœëì ì¬ì¬ì©ìŽë êŽì ìì ë§€ì° ì ì©íë€. ìì±ì íšìê° ìì±í 몚ë ìžì€íŽì€ê° ê³µíµì ìŒë¡ ì¬ì©í íë¡íŒí°ë ë©ìë륌 íë¡í íì ì 믞늬 구íì ëìŒë©Ž ìì±ì íšìê° ìì±í 몚ë ìžì€íŽì€ë ë³ëì 구í ììŽ ìì(ë¶ëªš) ê°ì²Žìž íë¡í íì ì ìì°ì ê³µì íì¬ ì¬ì©í ì ìë€.
íë¡í íì ê°ì²Ž
íë¡í íì ê°ì²Ž(ëë ì€ì¬ì íë¡í íì )ë ê°ì²Žì§í¥ íë¡ê·žëë°ì ê·Œê°ì ìŽë£šë ê°ì²Ž ê° ìì(inheritance)ì 구ííêž° ìíŽ ì¬ì©ëë€.
íë¡í íì ì ìŽë€ ê°ì²Žì ìì(ë¶ëªš) ê°ì²Žì ìí ì íë ê°ì²Žë¡ì ë€ë¥ž ê°ì²Žì ê³µì íë¡íŒí°(ë©ìë í¬íš)륌 ì ê³µíë€.
íë¡í íì ì ììë°ì íì(ìì) ê°ì²Žë ìì ê°ì²Žì íë¡íŒí°ë¥Œ ìì ì íë¡íŒí°ì²ëŒ ìì ë¡ê² ì¬ì©í ì ìë€.
몚ë ê°ì²Žë [[Prototype]]
ìŽëŒë ëŽë¶ ì¬ë¡¯ì ê°ì§ë©°, ìŽ ëŽë¶ ì¬ë¡¯ì ê°ì íë¡í íì
ì ì°žì¡°(nullìž ê²œì°ë ìë€)ë€.
[[Prototype]]ì ì ì¥ëë íë¡í íì ì ê°ì²Ž ìì± ë°©ìì ìíŽ ê²°ì ëë€. ìŠ, ê°ì²Žê° ìì±ë ë ê°ì²Ž ìì± ë°©ìì ë°ëŒ íë¡í íì ìŽ ê²°ì ëê³ [[Prototype]]ì ì ì¥ëë€.
__proto__ ì ê·Œì íë¡íŒí°
몚ë ê°ì²Žë __proto__ ì ê·Œì íë¡íŒí°ë¥Œ íµíŽ ìì ì íë¡í íì , ìŠ [[Prototype]] ëŽë¶ ì¬ë¡¯ì ê°ì ì ìŒë¡ ì ê·Œí ì ìë€.
íšì ê°ì²Žì prototype íë¡íŒí°
íšì ê°ì²Žë§ìŽ ìì íë prototype íë¡íŒí°ë ìì±ì íšìê° ìì±í ìžì€íŽì€ì íë¡í íì ì ê°ëŠ¬íšë€.
몚ë ê°ì²Žê° ê°ì§ê³ ìë(ìë°í ë§íë©Ž Object.prototypeìŒë¡ë¶í° ììë°ì) proto ì ê·Œì íë¡íŒí°ì íšì ê°ì²Žë§ìŽ ê°ì§ê³ ìë prototype íë¡íŒí°ë ê²°êµ ëìŒí íë¡í íì ì ê°ëŠ¬íšë€.
íë¡í íì ì constructor íë¡íŒí°ì ìì±ì íšì
몚ë íë¡í íì ì constructor íë¡íŒí°ë¥Œ ê°ëë€. ìŽ constructor íë¡íŒí°ë prototype íë¡íŒí°ë¡ ìì ì ì°žì¡°íê³ ìë ìì±ì íšì륌 ê°ëŠ¬íšë€. ìŽ ì°ê²°ì ìì±ì íšìê° ìì±ë ë, ìŠ íšì ê°ì²Žê° ìì±ë ë ìŽë€ì§ë€.
늬í°ëŽ íêž°ë²ì ìíŽ ìì±ë ê°ì²Žì ìì±ì íšìì íë¡í íì
ììì ìŽíŽë³ž ë°ì ê°ìŽ ìì±ì íšìì ìíŽ ìì±ë ìžì€íŽì€ë íë¡í íì ì constructor íë¡íŒí°ì ìíŽ ìì±ì íšìì ì°ê²°ëë€. ìŽë constructor íë¡íŒí°ê° ê°ëŠ¬í€ë ìì±ì íšìë ìžì€íŽì€ë¥Œ ìì±í ìì±ì íšììŽë€.
íë¡í íì 곌 ìì±ì íšìë ëšë ìŒë¡ ì¡Žì¬í ì ìê³ ìžì ë ì(pair)ìŒë¡ ì¡Žì¬íë€.
íë¡í íì ì ìì± ìì
ê°ì²Žë 늬í°ëŽ íêž°ë² ëë ìì±ì íšìì ìíŽ ìì±ëë¯ë¡ ê²°êµ ëªšë ê°ì²Žë ìì±ì íšìì ì°ê²°ëìŽ ìë€.
íë¡í íì ì ìì±ì íšìê° ìì±ëë ìì ì ëë¶ìŽ ìì±ëë€.
ì¬ì©ì ì ì ìì±ì íšìì íë¡í íì ìì± ìì
ëŽë¶ ë©ìë [[Construct]]륌 ê°ë íšì ê°ì²Ž, ìŠ íìŽí íšìë ES6ì ë©ìë ì¶ìœ ííìŒë¡ ì ìíì§ ìê³ ìŒë° íšì(íšì ì ìžë¬ž, íšì ííì)ë¡ ì ìí íšì ê°ì²Žë new ì°ì°ìì íšê» ìì±ì íšìë¡ì ížì¶í ì ìë€.
ìì±ì íšìë¡ì ížì¶í ì ìë íšì, ìŠ constructorë íšì ì ìê° íê°ëìŽ íšì ê°ì²Žë¥Œ ìì±íë ìì ì íë¡í íì ë ëë¶ìŽ ìì±ëë€.
ìì±ì íšìë¡ì ížì¶í ì ìë íšì, ìŠ non-constructorë íë¡í íì ìŽ ìì±ëì§ ìëë€.
ë¹ížìž ìì±ì íšìì íë¡í íì ìì± ìì
Object, String, Number, Function, Array, RegExp, Date, Promise ë±ê³Œ ê°ì ë¹ížìž ìì±ì íšìë ìŒë° íšìì ë§ì°¬ê°ì§ë¡ ë¹ížìž ìì±ì íšìê° ìì±ëë ìì ì íë¡í íì ìŽ ìì±ëë€. 몚ë ë¹ížìž ìì±ì íšìë ì ì ê°ì²Žê° ìì±ëë ìì ì ìì±ëë€. ìì±ë íë¡í íì ì ë¹ížìž ìì±ì íšìì prototype íë¡íŒí°ì ë°ìžë©ëë€.
íì€ ë¹ížìž ê°ì²Žìž Objectë ì ì ê°ì²Žì íë¡íŒí°ìŽë©°, ì ì ê°ì²Žê° ìì±ëë ìì ì ìì±ëë€.
ê°ì²Žê° ìì±ëêž° ìŽì ì ìì±ì íšìì íë¡í íì ì ìŽë¯ž ê°ì²ŽíëìŽ ì¡Žì¬íë€. ìŽí ìì±ì íšì ëë 늬í°ëŽ íêž°ë²ìŒë¡ ê°ì²Žë¥Œ ìì±íë©Ž íë¡í íì ì ìì±ë ê°ì²Žì [[Prototype]] ëŽë¶ ì¬ë¡¯ì í ë¹ëë€. ìŽë¡ìš ìì±ë ê°ì²Žë íë¡í íì ì ììë°ëë€.
ê°ì²Ž ìì± ë°©ì곌 íë¡í íì ì ê²°ì
ë€ìí ë°©ììŒë¡ ìì±ë 몚ë ê°ì²Žë ê° ë°©ìë§ë€ ìžë¶ì ìž ê°ì²Ž ìì± ë°©ìì ì°šìŽë ììŒë ì¶ì ì°ì° ObjectCreateì ìíŽ ìì±ëë€ë ê³µíµì ìŽ ìë€.
íë¡í íì ì ì¶ì ì°ì° ObjectCreateì ì ë¬ëë ìžìì ìíŽ ê²°ì ëë€. ìŽ ìžìë ê°ì²Žê° ìì±ëë ìì ì ê°ì²Ž ìì± ë°©ìì ìíŽ ê²°ì ëë€.
ê°ì²Ž 늬í°ëŽì ìíŽ ìì±ë ê°ì²Žì íë¡í íì
ìë°ì€í¬ëŠœíž ìì§ì ê°ì²Ž 늬í°ëŽì íê°íì¬ ê°ì²Žë¥Œ ìì±í ë, ì¶ì ì°ì° ObjectCreate륌 ížì¶íë€. ìŽë ì¶ì ì°ì° ObjectCreateì ì ë¬ëë íë¡í íì ì Object.prototypeìŽë€. ìŠ, ê°ì²Ž 늬í°ëŽì ìíŽ ìì±ëë ê°ì²Žì íë¡í íì ì Object.prototypeìŽë€.
Object ìì±ì íšìì ìíŽ ìì±ë ê°ì²Žì íë¡í íì
Object ìì±ì íšì륌 ìžì ììŽ ížì¶íë©Ž ë¹ ê°ì²Žê° ìì±ëë€. Object ìì±ì íšì륌 ížì¶íë©Ž ê°ì²Ž 늬í°ëŽê³Œ ë§ì°¬ê°ì§ë¡ ì¶ì ì°ì° ObjectCreateê° ížì¶ëë€. ìŽë ì¶ì ì°ì° ObjectCreateì ì ë¬ëë íë¡í íì ì Object.prototypeìŽë€. ìŠ, Object ìì±ì íšìì ìíŽ ìì±ëë ê°ì²Žì íë¡í íì ì Object.prototypeìŽë€.
ìì±ì íšìì ìíŽ ìì±ë ê°ì²Žì íë¡í íì
new ì°ì°ìì íšê» ìì±ì íšì륌 ížì¶íì¬ ìžì€íŽì€ë¥Œ ìì±íë©Ž ë€ë¥ž ê°ì²Ž ìì± ë°©ì곌 ë§ì°¬ê°ì§ë¡ ì¶ì ì°ì° ObjectCreateê° ížì¶ëë€. ìŽë ì¶ì ì°ì° ObjectCreateì ì ë¬ëë íë¡í íì ì ìì±ì íšìì prototype íë¡íŒí°ì ë°ìžë©ëìŽ ìë ê°ì²Žë€. ìŠ, ìì±ì íšìì ìíŽ ìì±ëë ê°ì²Žì íë¡í íì ì ìì±ì íšìì prototype íë¡íŒí°ì ë°ìžë©ëìŽ ìë ê°ì²ŽìŽë€.
íë¡í íì 첎ìž
ìë°ì€í¬ëŠœížë ê°ì²Žì íë¡íŒí°(ë©ìë í¬íš)ì ì ê·Œíë €ê³ í ë íŽë¹ ê°ì²Žì ì ê·Œíë €ë íë¡íŒí°ê° ìë€ë©Ž [[Prototype]] ëŽë¶ ì¬ë¡¯ì 찞조륌 ë°ëŒ ìì ì ë¶ëªš ìí ì íë íë¡í íì ì íë¡íŒí°ë¥Œ ìì°šì ìŒë¡ ê²ìíë€. ìŽë¥Œ íë¡í íì 첎ìžìŽëŒ íë€. íë¡í íì 첎ìžì ìë°ì€í¬ëŠœížê° ê°ì²Žì§í¥ íë¡ê·žëë°ì ììì 구ííë ë©ì»€ëìŠìŽë€.
ì€ë²ëŒìŽë©ê³Œ íë¡íŒí° ìëì
íë¡í íì íë¡íŒí°ì ê°ì ìŽëŠì íë¡íŒí°ë¥Œ ìžì€íŽì€ì ì¶ê°íë©Ž íë¡í íì 첎ìžì ë°ëŒ íë¡í íì íë¡íŒí°ë¥Œ ê²ìíì¬ íë¡í íì íë¡íŒí°ë¥Œ ë®ìŽì°ë ê²ìŽ ìëëŒ ìžì€íŽì€ íë¡íŒí°ë¡ ì¶ê°íë€.
ì€ë²ëŒìŽë©(overriding)
ìì íŽëì€ê° ê°ì§ê³ ìë ë©ìë륌 íì íŽëì€ê° ì¬ì ìíì¬ ì¬ì©íë ë°©ììŽë€.
ì€ë²ë¡ë©(overloading)
íšìì ìŽëŠì ëìŒíì§ë§ 맀ê°ë³ìì íì ëë ê°ìê° ë€ë¥ž ë©ìë륌 구ííê³ ë§€ê°ë³ìì ìíŽ ë©ìë륌 구ë³íì¬ ížì¶íë ë°©ììŽë€. ìë°ì€í¬ëŠœížë ì€ë²ë¡ë©ì ì§ìíì§ ìì§ë§ arguments ê°ì²Žë¥Œ ì¬ì©íì¬ êµ¬íí ìë ìë€.
íì ê°ì²Žë¥Œ íµíŽ íë¡í íì ì íë¡íŒí°ë¥Œ ë³ê²œ ëë ìì íë ê²ì ë¶ê°ë¥íë€. ë€ì ë§íŽ íì ê°ì²Žë¥Œ íµíŽ íë¡í íì ì get ì¡ìžì€ë íì©ëë set ì¡ìžì€ë íì©ëì§ ìëë€.
íë¡í íì íë¡íŒí°ë¥Œ ë³ê²œ ëë ìì íë €ë©Ž íì ê°ì²Žë¥Œ íµíŽ íë¡í íì 첎ìžìŒë¡ ì ê·Œíë ê²ìŽ ìëëŒ íë¡í íì ì ì§ì ì ê·Œíì¬ìŒ íë€.
íë¡í íì ì êµì²Ž
íë¡í íì ì ììì ë€ë¥ž ê°ì²Žë¡ ë³ê²œí ì ìë€. ìŽê²ì ë¶ëªš ê°ì²Žìž íë¡í íì ì ëì ìŒë¡ ë³ê²œí ì ìë€ë ê²ì ì믞íë€. ìŽë¬í í¹ì§ì íì©íì¬ ê°ì²Ž ê°ì ìì êŽê³ë¥Œ ëì ìŒë¡ ë³ê²œí ì ìë€. íë¡í íì ì ìì±ì íšì ëë ìžì€íŽì€ì ìíŽ êµì²Ží ì ìë€.
ìì±ì íšìì ìí íë¡í íì ì êµì²Ž
íë¡í íì ìŒë¡ êµì²Ží ê°ì²Ž 늬í°ëŽìë constructor íë¡íŒí°ê° ìë€. constructor íë¡íŒí°ë ìë°ì€í¬ëŠœíž ìì§ìŽ íë¡í íì ì ìì±í ë ì묵ì ìŒë¡ ì¶ê°í íë¡íŒí°ë€.
íë¡í íì ì êµì²Žíë©Ž constructor íë¡íŒí°ì ìì±ì íšì ê°ì ì°ê²°ìŽ íꎎëë€.
íë¡í íì 첎ìžì ë°ëŒ Object.prototypeì constructor íë¡íŒí°ê° ê²ìëë€.
íë¡í íì ìŒë¡ êµì²Ží ê°ì²Ž 늬í°ëŽì constructor íë¡íŒí°ë¥Œ ì¶ê°íì¬ íë¡í íì ì constructor íë¡íŒí°ë¥Œ ëìŽëŠ°ë€.
ìžì€íŽì€ì ìí íë¡í íì ì êµì²Ž
íë¡í íì ì ìì±ì íšìì prototype íë¡íŒí°ë¿ë§ ìëëŒ ìžì€íŽì€ì __proto__ ì ê·Œì íë¡íŒí°(ëë Object.getPrototypeOf ë©ìë)륌 íµíŽ ì ê·Œí ì ìë€. ë°ëŒì ìžì€íŽì€ì __proto__ ì ê·Œì íë¡íŒí°(ëë Object.setPrototypeOf ë©ìë)륌 íµíŽ íë¡í íì ì êµì²Ží ì ìë€.
ìì±ì íšìì prototype íë¡íŒí°ì ë€ë¥ž ììì ê°ì²Žë¥Œ ë°ìžë©íë ê²ì 믞ëì ìì±í ìžì€íŽì€ì íë¡í íì ì êµì²Žíë ê²ìŽë€.
__proto__ ì ê·Œì íë¡íŒí°ë¥Œ íµíŽ íë¡í íì ì êµì²Žíë ê²ì ìŽë¯ž ìì±ë ê°ì²Žì íë¡í íì ì êµì²Žíë ê²ìŽë€.
ìì±ì íšìì ìí íë¡í íì êµì²Žì ë§ì°¬ê°ì§ë¡ íë¡í íì ìŒë¡ êµì²Ží ê°ì²Žìë constructor íë¡íŒí°ê° ììŒë¯ë¡ constructor íë¡íŒí°ì ìì±ì íšì ê°ì ì°ê²°ìŽ íꎎëë€.
ìì±ì íšìì ìí íë¡í íì êµì²Žì ìžì€íŽì€ì ìí íë¡í íì êµì²Žë ì°šìŽê° ì¡Žì¬íë€.
íë¡í íì êµì²Žë¥Œ íµíŽ ê°ì²Ž ê°ì ìì êŽê³ë¥Œ ëì ìŒë¡ ë³ê²œíë ê²ì ꜀ë ë²ê±°ë¡ë€. ë°ëŒì íë¡í íì ì ì§ì êµì²Žíì§ ìë ê²ìŽ ì¢ë€
ìì êŽê³ë¥Œ ìžìì ìŒë¡ ì€ì íë €ë©Ž â19.11. ì§ì ììâìì ìŽíŽë³Œ ì§ì ìììŽ ë ížëŠ¬íê³ ìì íë€.
ES6ìì ëì ë íŽëì€ë¥Œ ì¬ì©íë©Ž ê°ížíê³ ì§êŽì ìŒë¡ ìì êŽê³ë¥Œ 구íí ì ìë€.
instanceof ì°ì°ì
instanceof ì°ì°ìë ìŽí ì°ì°ìë¡ì ì¢ë³ì ê°ì²Žë¥Œ ê°ëŠ¬í€ë ìë³ì, ì°ë³ì ìì±ì íšì륌 ê°ëŠ¬í€ë ìë³ì륌 íŒì°ì°ìë¡ ë°ëë€. ë§ìœ ì°ë³ì íŒì°ì°ìê° íšìê° ìë ê²œì° TypeErrorê° ë°ìíë€.
ì°ë³ì ìì±ì íšìì prototypeì ë°ìžë©ë ê°ì²Žê° ì¢ë³ì ê°ì²Žì íë¡í íì ì²Žìž ìì ì¡Žì¬íë©Ž trueë¡ íê°ëê³ , ê·žë ì§ ìì 겜ì°ìë falseë¡ íê°ëë€.
instanceof ì°ì°ìë íë¡í íì ì constructor íë¡íŒí°ê° ê°ëŠ¬í€ë ìì±ì íšì륌 ì°Ÿë ê²ìŽ ìëëŒ, ìì±ì íšìì prototypeì ë°ìžë©ë ê°ì²Žê° íë¡í íì ì²Žìž ìì ì¡Žì¬íëì§ íìžíë€.
instanceof ì°ì°ìë ì¢ë³ íŒì°ì°ìì íë¡í íì ì²Žìž ìì ì°ë³ì íŒì°ì°ì, ìŠ ìì±ì íšìì prototype íë¡íŒí°ì ë°ìžë©ë ê°ì²Žê° ì¡Žì¬íë ì§ ê²ìíë€.
ìì±ì íšìì ìíŽ íë¡í íì ìŽ êµì²ŽëìŽ constructor íë¡íŒí°ì ìì±ì íšì ê°ì ì°ê²°ìŽ íꎎëìŽë ìì±ì íšìì prototype íë¡íŒí°ì íë¡í íì ê°ì ì°ê²°ì íꎎëì§ ììŒë¯ë¡ instanceofë ìë¬Žë° ìí¥ì ë°ì§ ìëë€.
ì§ì ìì
Object.createì ìí ì§ì ìì
Object.create ë©ìëë ëª ìì ìŒë¡ íë¡í íì ì ì§ì íì¬ ìë¡ìŽ ê°ì²Žë¥Œ ìì±íë€. Object.create ë©ìëë ë€ë¥ž ê°ì²Ž ìì± ë°©ì곌 ë§ì°¬ê°ì§ë¡ ì¶ì ì°ì° ObjectCreate륌 ížì¶íë€.
Object.create ë©ìëì 첫 ë²ì§ž 맀ê°ë³ììë ìì±í ê°ì²Žì íë¡í íì ìŒë¡ ì§ì í ê°ì²Žë¥Œ ì ë¬íë€. ë ë²ì§ž 맀ê°ë³ììë ìì±í ê°ì²Žì íë¡íŒí° í€ì íë¡íŒí° ëì€í¬ëŠœí° ê°ì²Žë¡ ìŽë€ì§ ê°ì²Žë¥Œ ì ë¬íë€.
ìŽ ê°ì²Žì íìì Object.defineProperties ë©ìë(â16.4. íë¡íŒí° ì ìâ ì°žê³ )ì ë ë²ì§ž ìžìì ëìŒíë€. ë ë²ì§ž ìžìë ìµì ìŽë¯ë¡ ìëµ ê°ë¥íë€.
Object.create ë©ìëë 첫 ë²ì§ž 맀ê°ë³ìì ì ë¬í ê°ì²Žì íë¡í íì 첎ìžì ìíë ê°ì²Žë¥Œ ìì±íë€. ìŠ, ê°ì²Žë¥Œ ìì±íë©Žì ì§ì ì ìŒë¡ ììì 구ííë ê²ìŽë€.
Object.create ë©ìëì ì¥ì
- new ì°ì°ìê° ììŽë ê°ì²Žë¥Œ ìì±í ì ìë€.
- íë¡í íì ì ì§ì íë©Žì ê°ì²Žë¥Œ ìì±í ì ìë€.
- ê°ì²Ž 늬í°ëŽì ìíŽ ìì±ë ê°ì²Žë ììë°ì ì ìë€.
Object.create ë©ìë륌 íµíŽ íë¡í íì 첎ìžì ì¢ ì ì ìì¹íë ê°ì²Žë¥Œ ìì±í ì ìêž° ë묞ìŽë€. íë¡í íì 첎ìžì ì¢ ì ì ìì¹íë ê°ì²Žë Object.prototypeì ë¹ížìž ë©ìë륌 ì¬ì©í ì ìë€.
íë¡í íì ìŽ nullìž ê°ì²Ž, ìŠ íë¡í íì 첎ìžì ì¢ ì ì ìì¹íë ê°ì²Žë¥Œ ìì±íë€.
ìë¬ë¥Œ ë°ììí¬ ìíì ìì êž° ìíŽ Object.prototypeì ë¹ížìž ë©ìëë ë€ì곌 ê°ìŽ ê°ì ì ìŒë¡ ížì¶íë ê²ìŽ ì¢ë€.
ê°ì²Ž 늬í°ëŽ ëŽë¶ìì __proto__ì ìí ì§ì ìì
Object.create ë©ìëì ìí ì§ì ììì ììì ë€ë£¬ ê²ê³Œ ê°ìŽ ì¬ë¬ ì¥ì ìŽ ìë€. íì§ë§ ë ë²ì§ž ìžìë¡ íë¡íŒí°ë¥Œ ì ìíë ê²ì ë²ê±°ë¡ë€. ìŒëš ê°ì²Žë¥Œ ìì±í ìŽí, íë¡íŒí°ë¥Œ ì¶ê°íë ë°©ë²ë ììŒë ìŽ ëí ê¹ëí ë°©ë²ì ìëë€.
ES6ììë ê°ì²Ž 늬í°ëŽ ëŽë¶ìì __proto__ ì ê·Œì íë¡íŒí°ë¥Œ ì¬ì©íì¬ ì§ì ììì 구íí ì ìë€.
ì ì íë¡íŒí°/ë©ìë
ì ì (static) íë¡íŒí°/ë©ìëë ìì±ì íšìë¡ ìžì€íŽì€ë¥Œ ìì±íì§ ììë ì°žì¡°/ížì¶í ì ìë íë¡íŒí°/ë©ìë륌 ë§íë€.
ì ì íë¡íŒí°/ë©ìëë ìì±ì íšìê° ìì±í ìžì€íŽì€ë¡ ì°žì¡°/ížì¶í ì ìë€.
ìì±ì íšìê° ìì±í ìžì€íŽì€ë ìì ì íë¡í íì 첎ìžì ìí ê°ì²Žì íë¡íŒí°/ë©ìëì ì ê·Œí ì ìë€. íì§ë§ ì ì íë¡íŒí°/ë©ìëë ìžì€íŽì€ì íë¡í íì 첎ìžì ìí ê°ì²Žì íë¡íŒí°/ë©ìëê° ìëë¯ë¡ ìžì€íŽì€ë¡ ì ê·Œí ì ìë€.
ììì ìŽíŽë³ž Object.create ë©ìëë Object ìì±ì íšìì ì ì ë©ìëê³ Object.prototype.hasOwnProperty ë©ìëë Object.prototypeì ë©ìëë€. ë°ëŒì Object.create ë©ìëë ìžì€íŽì€, ìŠ Object ìì±ì íšìê° ìì±í ê°ì²Žë¡ ížì¶í ì ìë€. íì§ë§ Object.prototype.hasOwnProperty ë©ìëë 몚ë ê°ì²Žì íë¡í íì 첎ìžì ì¢ ì , ìŠ Object.prototypeì ë©ìëìŽë¯ë¡ 몚ë ê°ì²Žê° ížì¶í ì ìë€.
ìžì€íŽì€/íë¡í íì ë©ìë ëŽìì this륌 ì¬ì©íì§ ìëë€ë©Ž ê·ž ë©ìëë ì ì ë©ìëë¡ ë³ê²œí ì ìë€. ìžì€íŽì€ê° ížì¶í ìžì€íŽì€/íë¡í íì ë©ìë ëŽìì thisë ìžì€íŽì€ë¥Œ ê°ëŠ¬íšë€. ë©ìë ëŽìì ìžì€íŽì€ë¥Œ ì°žì¡°í íìê° ìë€ë©Ž ì ì ë©ìëë¡ ë³ê²œíì¬ë ëìíë€. íë¡í íì ë©ìë륌 ížì¶íë €ë©Ž ìžì€íŽì€ë¥Œ ìì±íŽìŒ íì§ë§ ì ì ë©ìëë ìžì€íŽì€ë¥Œ ìì±íì§ ììë ížì¶í ì ìë€.
íë¡í íì ë©ìë
this륌 ì°žì¡°íì§ ìë íë¡í íì ë©ìëë ì ì ë©ìëë¡ ë³ê²œíì¬ë ëìŒí íšê³Œë¥Œ ì»ì ì ìë€.
íë¡í íì ë©ìë륌 ížì¶íë €ë©Ž ìžì€íŽì€ë¥Œ ìì±íŽìŒ íë€.
ì ì ë©ìë
ì ì ë©ìëë ìžì€íŽì€ë¥Œ ìì±íì§ ììë ížì¶í ì ìë€.
íë¡íŒí° ì¡Žì¬ íìž
in ì°ì°ì
in ì°ì°ìë ê°ì²Ž ëŽì íë¡íŒí°ê° ì¡Žì¬íëì§ ì¬ë¶ë¥Œ íìžíë€.
in ì°ì°ìë íìž ëì ê°ì²Žì íë¡íŒí°ë¿ë§ ìëëŒ íìž ëì ê°ì²Žê° ììë°ì 몚ë íë¡í íì ì íë¡íŒí°ë¥Œ íìžíë¯ë¡ 죌ìê° íìíë€.
in ì°ì°ì ëì ES6ìì ìë¡ê² ëì ë Reflect.has ë©ìë륌 ì¬ì©í ìë ìë€. Reflect.has ë©ìëë in ì°ì°ìì ëìŒíê² ëìíë€.
Object.prototype.hasOwnProperty ë©ìë
Object.prototype.hasOwnProperty ë©ìë륌 ì¬ì©íŽë ê°ì²Žì íë¡íŒí°ì ì¡Žì¬ ì¬ë¶ë¥Œ íìží ì ìë€.
ì ë¬ë°ì íë¡íŒí° í€ê° ê°ì²Ž ê³ ì ì íë¡íŒí° í€ìž 겜ì°ìë§ true륌 ë°ííê³ ììë°ì íë¡í íì ì íë¡íŒí° í€ìž ê²œì° false륌 ë°ííë€.
íë¡íŒí° ìŽê±°
for...in 묞
ê°ì²Žì 몚ë íë¡íŒí°ë¥Œ ìííë©° ìŽê±°(enumeration)íë €ë©Ž forâŠin 묞ì ì¬ì©íë€.
forâŠin 묞ì ê°ì²Žì íë¡íŒí° ê°ìë§íŒ ìííë©° forâŠin 묞ì ë³ì ì ìžë¬žìì ì ìží ë³ìì íë¡íŒí° í€ë¥Œ í ë¹íë€.
forâŠin 묞ì in ì°ì°ìì²ëŒ ìí ëì ê°ì²Žì íë¡íŒí° ë¿ë§ ìëëŒ ììë°ì íë¡í íì ì íë¡íŒí°ê¹ì§ ìŽê±°íë€.
íë¡íŒí° ìŽížëŠ¬ë·°íž [[Enumerable]]ë íë¡íŒí°ì ìŽê±° ê°ë¥ ì¬ë¶ë¥Œ ëíëŽë©° ë¶ëŠ¬ìž ê°ì ê°ëë€.
forâŠin 묞ì ê°ì²Žì íë¡í íì ì²Žìž ìì ì¡Žì¬íë 몚ë íë¡í íì ì íë¡íŒí° ì€ìì íë¡íŒí° ìŽížëŠ¬ë·°íž [[Enumerable]]ì ê°ìŽ tureìž íë¡íŒí°ë¥Œ ìííë©° ìŽê±°(enumeration)íë€.
forâŠin 묞ì íë¡íŒí° í€ê° ì¬ë²ìž íë¡íŒí°ë ìŽê±°íì§ ìëë€.
ììë°ì íë¡íŒí°ë ì ìžíê³ ê°ì²Ž ìì ì íë¡íŒí° ë§ì ìŽê±°íë €ë©Ž Object.prototype.hasOwnProperty ë©ìë륌 ì¬ì©íì¬ ê°ì²Ž ìì ì íë¡íŒí°ìžì§ íìžíŽìŒ íë€.
forâŠin 묞ì íë¡íŒí°ë¥Œ ìŽê±°í ë ìì륌 볎ì¥íì§ ììŒë¯ë¡ 죌ìíêž° ë°ëë€. íì§ë§ ëë¶ë¶ì 몚ë ëžëŒì°ì ë ìì륌 볎ì¥íê³ ì«ì(ì¬ì€ì 묞ììŽ)ìž íë¡íŒí° í€ì ëíŽìë ì ë ¬ì ì€ìíë€.
ë°°ìŽìë forâŠin 묞ì ì¬ì©íì§ ë§ê³ ìŒë°ì ìž for 묞ìŽë forâŠof 묞 ëë Array.prototype.forEach ë©ìë륌 ì¬ì©íꞰ륌 ê¶ì¥íë€. ì¬ì€ ë°°ìŽë ê°ì²ŽìŽë¯ë¡ íë¡íŒí°ì ììë°ì íë¡íŒí°ê° í¬íšë ì ìë€.
Object.keys/values/entries ë©ìë
ì§êžê¹ì§ ìŽíŽë³Žìë¯ìŽ forâŠin 묞ì ê°ì²Ž ìì ì ê³ ì íë¡íŒí° ë¿ë§ ìëëŒ ììë°ì íë¡íŒí°ë ìŽê±°íë€. ë°ëŒì Object.prototype.hasOwnProperty ë©ìë륌 ì¬ì©íì¬ ê°ì²Ž ìì ì íë¡íŒí°ìžì§ íìžíë ì¶ê° ì²ëŠ¬ê° íìíë€.
ê°ì²Ž ìì ì ê³ ì íë¡íŒí°ë§ì ìŽê±°íêž° ìíŽìë forâŠin 묞ì ì¬ì©íë ê² ë³Žë€ Object.keys/values/entries ë©ìë륌 ì¬ì©íë ê²ì ê¶ì¥íë€.
Object.keys ë©ìëë ê°ì²Ž ìì ì ìŽê±° ê°ë¥í(enumerable) íë¡íŒí° í€ë¥Œ ë°°ìŽë¡ ë°ííë€.
ES8ìì ëì ë Object.values ë©ìëë ê°ì²Ž ìì ì ìŽê±° ê°ë¥í íë¡íŒí° ê°ì ë°°ìŽë¡ ë°ííë€.
ES8ìì ëì ë Object.entries ë©ìëë ê°ì²Ž ìì ì ìŽê±° ê°ë¥í íë¡íŒí° í€ì ê°ì ìì ë°°ìŽì ë°°ìŽì ëŽì ë°ííë€.