[[TableOfContents]] * ê°•ì˜ ë…¸íŠ¸ëŠ” ë‚ ì§œë‚˜ ìš”ì¼ ë³„ë¡œ 구분하지 ì•Šê³ í° ì£¼ì œë³„ë¡œ ë¶„ë¦¬í• ìƒê°ìž…니다. ê·¸ë ‡ê²Œ 하는 íŽ¸ì´ ë‚˜ì¤‘ì— ì°¾ì•„ë³´ê¸°ì— ì¢‹ì„것 같습니다 -[안í˜ì¤€] * ì €ì˜ ì£¼ê´€ì ì¸ ë¶€ë¶„ì´ ë§Žì´ ë“¤ì–´ 갈수 있으므로 부족하다 ìƒê°ë˜ëŠ” ë¶€ë¶„ì€ ì±„ì›Œì£¼ì„¸ìš”. * ê°•ì˜ ë…¸íŠ¸ëŠ” ê°™ì´ ë§Œë“¤ì–´ 나가는 것ì´ë¯€ë¡œ 모ë‘들 함께 채워나갑시다. == JavaScript란? == === Prototype 기반 언어 === * prototype언어? * oopì˜ íë¦„ì€ class와 prototype으로 나늰다. * prototypeì€ í´ëž˜ìŠ¤ê°€ ë“¤ê³ ìžˆì–´ì•¼í•˜ëŠ” í•¨ìˆ˜ë“¤ì„ íŠ¹ì • ì¸ìŠ¤í„´ìŠ¤ê°€ ë“¤ê³ ìžˆê²Œ 만드는 것ì´ë‹¤. * ì´ íŠ¹ì • ì¸ìŠ¤í„´ìŠ¤ë¥¼ prototypeì´ë¼ 부른다. === 함수형 언어 === * 함수를 ì¼ê¸‰ê°ì²´ë¡œ 다루는 언어 * ì¼ê¸‰ê°ì²´ëž€? * 변수 ì•ˆì— ë‹´ì„수 ìžˆê³ , * 파ë¼ë¯¸í„°ë¡œ ì „ë‹¬í• ìˆ˜ 있으며, * ë°˜í™˜ê°’ì„ ì‚¬ìš©í• ìˆ˜ ìžˆê³ * í• ë‹¹ëœì´ë¦„ê³¼ ê´€ê³„ì—†ì´ êµ¬ë¶„í• ìˆ˜ 있다 == Javascript 문법 == === í´ë¡œì ¸ === * í´ë¡œì ¸ : ë‚´ë¶€ì˜ ìžˆëŠ” ì™¸ë¶€ì— ìžˆëŠ” í•¨ìˆ˜ì˜ ì§€ì— ë³€ìˆ˜ë¥¼ 쓸수 있는것. ë•Œë¬¸ì— ì˜ë„하지 ì•Šì€ ê²°ê³¼ë¥¼ ê°€ì ¸ì˜¬ìˆ˜ 있다. === Excuteion Context === * this * p.do() ì—서 pê°€ 실행문맥ì´ë‹¤. 그러나 ì´ í•¨ìˆ˜ë¥¼ë³€ìˆ˜ë¡œ 받으면 var f = p.do; f(); ì´ëŸ°ì‹ìœ¼ë¡œ 그러면 f는 ì‹¤í–‰ë¬¸ë§¥ì´ ì—†ê¸° ë•Œë¬¸ì— ì „ì—ê°ì²´ê°€ 실행문맥으로 간주ëœë‹¤. * ê²°ë¡ ì 으로 함수 앞 마지막 . ì•žì— ìžˆëŠ” ê²ƒì´ ì¤‘ìš”í•˜ë‹¤. * func.apply(ec, arguments) 나 func.call(ec, arg1, arg2, ... )으로 func안ì—ì„œì˜ ì‹¤í–‰ë¬¸ë§¥(this)를 ë³€ê²½í• ìˆ˜ 있다. === newì˜ ë™ìž‘ === * new Person(); * 1. create instance * 2. instance.__proto__ = Person.prototype; * ì´ë•Œì˜ __proto__는 í”„ë¡œí† íƒ€ìž… ì²´ì¸ì´ë¼ í• ìˆ˜ìžˆë‹¤.(엔진별로 다를수 있다.) * 3. ì‹¤í–‰ë¬¸ë§¥ì„ instance로 한 ìƒì„±ìžë¥¼ 호출한다. === prototype === ==== Class vs Prototype ==== * Class : 함수와 맴버 변수가 ê°ê° class와 ì¸ìŠ¤í„´ìŠ¤ì— ë‚˜ëˆ„ì–´ ì ¸ìžˆëŠ”ê²ƒ. * prototype : 함수와 맴버 변수 ëª¨ë‘ ì¸ìŠ¤í„´ìŠ¤ì— ì €ìž¥ë˜ìžˆëŠ”ê²ƒ * 단지 함수는 다른 ì¸ìŠ¤í„´ìŠ¤ì— ì¡´ìž¬í•œë‹¤. * ê·¸ 다른 ì¸ìŠ¤í„´ìŠ¤ëŠ” prototypeì´ë¼ 부른다. class <-----------------> prototype VTable <-----------------> prototype chain (__proto__) ==== ìƒì† ==== * ìƒì†ì„ 위해서는 prototype chainì— ë“±ë¡í•˜ë©´ ëœë‹¤. {{{ function People(){}; function Man(){}; Man.prototype = new People(); m = new Man(); }}} === dispatch === * ì‹¤ì œ 호출해야 하는 함수를 찾는 ê³¼ì • * javascriptì—서는 ì‹¤í–‰ì‹œê°„ì— í”„ë¡œí† íƒ€ìž… ì²´ì¸ì— ì˜í•´ 실행한다. * instanceì˜ __proto__ì—서 ì°¾ê³ ì—†ìœ¼ë©´ ê·¸ìœ„ì— __proto__ì—서 ì°¾ê³ ...