JavaScript¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ï¡¢µÕ¤Î½çÈ֤dzؤó¤À¤Û¤¦¤¬Íý²ò¤·¤ä¤¹¤¤¤È»×¤¦¤Î¤Ç¡Ä
¢¨¤³¤ÎÅê¹Æ¤Ï 2011/03/10 ¤Ë ¤³¤Á¤é ¤ËÅê¹Æ¤·¤¿µ»ö¤ÎžºÜ¤Ç¤¹¡£
¤³¤ì¤ò½ñ¤¤¤¿·Ð°Þ
¡¡»ö¤Îȯü¤È¤¤¤¦¤«¡¢¤¤Ã¤«¤±¤Ï¡¢id:perlcodesample¤µ¤ó¤Èid:gfx¤µ¤ó¤Î²¼¤Î¥Ý¥¹¥È¤ò¸«¤Æ¡¢
- JavaScript¤Ç°ìÈÖ´Êñ¤Ë¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¥×¥í¥°¥é¥ß¥ó¥°¤ò¹Ô¤¦ÊýË¡ (id:perlcodesample¤µ¤ó)
- JavaScript¤Ë¤ª¤±¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÄêµÁ (id:gfx¤µ¤ó)
¡¡new
¤È¤« prototype
¤ò»È¤¦¤Î¤¬¿ä¾©¤µ¤ì¤Æ¤Ê¤¤¤È¤«¡¢Ä¾ÀÜÂåÆþ¤¹¤ë¤Û¤¦¤¬³Ú¤È¤«¤¸¤ã¤Ê¤¯¤Æ¡¢µóư¤¬°ã¤¦¤ó¤À¤è¤Ê¤¡¡¢¤È»×¤Ã¤¿¤³¤È¡£
¡¡µóư¤¬°ã¤¦¤ó¤À¤«¤é¡¢¤â¤Á¤í¤ó»È¤¤¤É¤³¤í¤â°ã¤¦¤ó¤Ç¤¹¤è¤Í¡£
¡¡¤Ç¤â¼ÂºÝ¡¢JavaScript¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ïº®Í𤷤䤹¤¤¤È»×¤¤¤Þ¤¹¡£
¡¡¼«Ê¬¤â¤´Â¿Ê¬¤Ë¤â¤ì¤º¡¢¤µ¤ó¤¶¤óº®Í𤵤»¤é¤ì¤¿¥¯¥Á¤Ç¤¹¤·¤Í¡£
¡¡¤ï¤«¤Ã¤Æ¤·¤Þ¤¨¤Ð¡¢¤É¤Ã¤Æ¤³¤È¤Ê¤¯¤Æ¡¢¤È¤Ã¤Æ¤â¥·¥ó¥×¥ë¤Ê¤ó¤Ç¤¹¤±¤É¤Í¡£
¡¡¤»¤Ã¤«¤¯¤Ê¤Î¤Ç¡¢º£¤À¤«¤é¤³¤½¸À¤¨¤ë¡¢¼«Ê¬¤À¤Ã¤¿¤é¤³¤¦¤ä¤Ã¤Æ¶µ¤¨¤ÆÍߤ·¤«¤Ã¤¿¤Ê¤¡¡¢¤Ã¤Æ¤¤¤¦ÀâÌÀ¤ò¤·¤Æ¤ß¤è¤¦¤«¤È»×¤¤¤Þ¤¹¡£
¡¡Âꤷ¤Æ¡¢JavaScript¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ï¡¢µÕ¤«¤éÆþÌ礷¤í¡ª
µÕ¤«¤é¤Ã¤Æ¤É¤³¤«¤é¡© ¢ª Object.create¤«¤é
¡¡»×¤¦¤Ë¡¢JavaScript¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ï¡¢new
¤«¤éÆþ¤ë¤è¤ê¤â¡¢Object.create
¤«¤éÆþ¤Ã¤¿¤Û¤¦¤¬Íý²ò¤·¤ä¤¹¤¤¤È»×¤¦¤ó¤Ç¤¹¤è¤Í¡£
¡¡Object.create
¤Ã¤Æ¤¤¤¦¤Î¤Ï¡¢¿·¤·¤¤JavaScript¤Î»ÅÍÍ¡ÊECMAScript 5th Edition¡Ë¤Çɸ½à¤Ë¼è¤êÆþ¤ì¤é¤ì¤¿¥á¥½¥Ã¥É¤Ç¡¢°ú¿ô¤Ç»ØÄꤷ¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò¥×¥í¥È¥¿¥¤¥×¤È¤¹¤ë¿·¤·¤¤¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¤³¤ó¤Ê¤Õ¤¦¤Ë¤Ç¤¹:
var mam = { given_name : "¥µ¥¶¥¨", family_name: "¥Õ¥°¥¿", who_am_i : function(){ alert(this.family_name + this.given_name); } }; var kid = Object.create(mam); kid.given_name = "¥¿¥é¥ª"; mam.who_am_i(); // ¥Õ¥°¥¿¥µ¥¶¥¨ kid.who_am_i(); // ¥Õ¥°¥¿¥¿¥é¥ª ¡¡kid¤¬mam¤Î¥á¥½¥Ã¥É¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¤Í¡£
¡¡¤½¤â¤½¤âJavaScript¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ã¤Æ¥×¥í¥È¥¿¥¤¥×¥Ù¡¼¥¹¤Î·Ñ¾µ¤Ê¤ï¤±¤Ç¡¢new
¤È¤«¥³¥ó¥¹¥È¥é¥¯¥¿¤Ã¤Æ¤¤¤¦¤Î¤Ï¤Ê¤¯¤Æ¤â¤¤¤¤¤ó¤Ç¤¹¡£
¡¡¤³¤Î Object.create
¥á¥½¥Ã¥É¤«¤é¤Ï¤¸¤á¤Æ¡¢½¾Í褫¤é¤¢¤ë new
¤È¥³¥ó¥¹¥È¥é¥¯¥¿¡¢¤½¤ì¤«¤éprototype
¥×¥í¥Ñ¥Æ¥£¤Îµóư¤ò¤ß¤Æ¤¤¤³¤¦¤È»×¤¤¤Þ¤¹¡£
¡¡¤Ä¤Þ¤ê¡¢Îò»ËŪ¤ËµÕ½ç¤È¤¤¤¦¤ï¤±¤Ç¤¹¡£
¡¡¤Á¤Ê¤ß¤Ë¡¢¤³¤Î Object.create
¥á¥½¥Ã¥É¤Ï¡¢¥â¥À¥ó¤Ê¥Ö¥é¥¦¥¶¤Ê¤é´û¤Ë¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¼ÂºÝ¤Ë¼Â¹Ô¤·¤Æ»î¤¹¤³¤È¤¬¤Ç¤¤Þ¤¹¡£¡Êº£²ó¼«Ê¬¤Ï¡¢Chrome 9.0¤Çưºî³Îǧ¤ò¤·¤Þ¤·¤¿¡£¡Ë
¤½¤â¤½¤â¥×¥í¥È¥¿¥¤¥×¤Ã¤Æ¤Ê¤ó¤Ê¤ó¡©
¡¡¾å¤Î¥³¡¼¥É¤ò¸«¤Æ¡¢¡ÖObject.create
¤ÎÃæ¤Ç¤Ï¿·¤·¤¤¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Æ mam
¤Î¥×¥í¥Ñ¥Æ¥£¤ò¥³¥Ô¤Ã¤Æ¤ë¤ó¤À¤Ê¡¢¤³¤ó¤Ê¤Õ¤¦¤Ë¢¡×
Object.create = function ( o ) { var p = {}; for ( var i in o ) { p[i] = o[i]; } return p; };
¡¡¤È»×¤Ã¤¿¥¢¥Ê¥¿¡ª¥¤¥¤Àþ¤¤¤Ã¤Æ¤Þ¤¹¡ª
¡¡¤Ç¤â¡¢»ö¤Ï¤½¤ì¤Û¤Éñ½ã¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¼¡¤Î¥³¡¼¥É¤ò³¤±¤Æ¼Â¹Ô¤·¤Æ¤ß¤Þ¤·¤ç¤¦:
¡¡call
¤Ï mam
¤Ë¤·¤«Äɲ䷤Ƥ¤¤Ê¤¤¤Î¤Ë¡¢kid
¤Î¤Û¤¦¤Ç¤â»È¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¤è¡£
¡¡¼Â¤Ï mam
¤È kid
¤ÏƱ¤¸¥ª¥Ö¥¸¥§¥¯¥È¤ò»Ø¤·¤Æ¤¤¤ë¡©¤¤¤ä¤¤¤ä¡¢¾å¤Î¤Ç who_am_i
¤ò¸Æ¤ó¤À»þ¤Ë¤Ï¡¢¤Á¤ã¤ó¤ÈÊÌ¡¹¤Ë¤Ê¤Ã¤Æ¤Þ¤·¤¿¤è¤Í¡£
¡¡¼ïÌÀ¤«¤·¤ò¤¹¤ë¤È¡¢kid
¤Ï¼«¿È¤Ë¥»¥Ã¥È¤µ¤ì¤¿ given_name
¥×¥í¥Ñ¥Æ¥£°Ê³°¤Ï¤Ê¤ó¤Ë¤â»ý¤Ã¤Æ¤¤¤Ê¤¤¡¢¤Û¤È¤ó¤É¶õ¤Ã¤Ý¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¹¡£
¡¡¤¿¤À¤·¡¢¼«Ê¬¤¬»ý¤Ã¤Æ¤¤¤Ê¤¤¥×¥í¥Ñ¥Æ¥£¤Ë¤Ä¤¤¤Æ¤Ï mam
¤ËÌ䤤¹ç¤ï¤»¤Æ¡¢mam
¤Î¤â¤Î¤ò¼«Ê¬¤Î¤â¤Î¤È¤·¤Æ»È¤ª¤¦¤È¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¡¡¼Â¤Ï kid
¤Ï¥æ¡¼¥¶¤Îµ¤¤Å¤«¤Ê¤¤¤È¤³¤í¤Ç mam
¤Ø¤Î»²¾È¤ò±£¤·»ý¤Ã¤Æ¤¤¤Æ¡¢¼«Ê¬¤¬ÃΤé¤Ê¤¤¤³¤È¤Ïmam
¤Î¥Þ¥Í¤ò¤¹¤ë¤ï¤±¤Ê¤ó¤Ç¤¹¤Í¡£
¡¡¤³¤Î¤è¤¦¤ÊÆÃÊ̤ʴط¸¤¬¤¢¤ë¤È¤¡¢mam
¤Ï kid
¤Î¥×¥í¥È¥¿¥¤¥×¤À¤È¸À¤¤¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢kid
¤¬ mam
¤ËÌ䤤¹ç¤ï¤»¤¿¥×¥í¥Ñ¥Æ¥£¤ò mam
¤â»ý¤Ã¤Æ¤¤¤Ê¤«¤Ã¤¿¤È¤·¤Þ¤·¤ç¤¦¡£
¡¡¤¹¤ë¤È mam
¤Ï¡¢¤ä¤Ï¤ê¼«Ê¬¤¬»ý¤Ã¤Æ¤¤¤ë±£¤·»²¾È¤ò»È¤Ã¤Æ¡¢¼«Ê¬¼«¿È¤Î¥×¥í¥È¥¿¥¤¥×¤Ø¤ÈÌ䤤¹ç¤ï¤»¤òÅÁȤµ¤»¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤Ë¥×¥í¥Ñ¥Æ¥£¤Îõº÷¤ò¤¿¤É¤Ã¤Æ¤¤¤¯¥ê¥ó¥¯¤ÎÏ¢¤Ê¤ê¤ò¡¢¥×¥í¥È¥¿¥¤¥×¥Á¥§¥¤¥ó¤È¸Æ¤ó¤À¤ê¤·¤Þ¤¹¡£
¡¡ºÇ½ªÅª¤Ë¡¢¤³¤Îº¿¤Î½ªÃ¼¤ÏÄ̾ï¤Ï Object.prototype
¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢½ªÃ¼¤Ë¤¿¤É¤ê¤Ä¤¤¤Æ¤â¤Þ¤À³ºÅö¤¹¤ë¥×¥í¥Ñ¥Æ¥£¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¡¢¥×¥í¥Ñ¥Æ¥£¤¬Ì¤ÄêµÁ¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡Object.create
¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È´Ö¤Ç¤³¤Î¤è¤¦¤ÊÆÃÊ̤ʴط¸¤òÃÛ¤¤¤Æ¤¯¤ì¤ë¤ï¤±¤Ç¤¹¤Í¡£
¥ª¡¼¥Ð¡¼¥é¥¤¥É¤Ï»Ò¶¡¤ÇÃͤòÀßÄꤹ¤ë¤À¤±
¡¡¤È¤³¤í¤Ç¡¢¾å¤Î call
¥á¥½¥Ã¥É¤Ç¤Ï¡¢kid
¤â mam
¤Î¥Þ¥Í¤ò¤·¤Æ¥«¥Ä¥ª¤ò¸Æ¤Ó¼Î¤Æ¤Ë¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤Þ¤·¤¿¡£
¡¡¤³¤³¤Ï¤Ò¤È¤Ä¡¢¤â¤¦¾¯¤·»Ò¶¡¤é¤·¤¯¸Æ¤Ö¤è¤¦¤Ë¤·¤Ä¤±¤ò¤·¤Æ¤¢¤²¤Þ¤·¤ç¤¦:
¡¡¥×¥í¥Ñ¥Æ¥£Ãµº÷¤Îµóư¤¬¤ï¤«¤Ã¤Æ¤·¤Þ¤¨¤Ð¡¢µóư¤òÊѤ¨¤¿¤¤¾ì¹ç¤Ïñ¤ËÃͤòÂåÆþ¤·¤Æ¤·¤Þ¤¨¤ÐÎɤ¤¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¤Í¡£
¡¡¤â¤Á¤í¤ó¡¢¤³¤ÎÃʳ¬¤Ç¤â mam
¤Î call
¤ÎÃͤϸµ¤Î¤Þ¤Þ¤Ç¤¹¡£
¡¡µÕ¤Ë¡¢kid
ÆÈ¼«¤Îµóư¤ò¸µ¤ËÌᤷ¤¿¤¤¤È»×¤Ã¤¿¤é¡¢¥×¥í¥Ñ¥Æ¥£¤òºï½ü¤·¤Æ¤ä¤ì¤ÐOK¤Ç¤¹:
¡¡kid
¤«¤é¥×¥í¥Ñ¥Æ¥£¤ò¾Ã¤·¤Æ¤â¡¢mam
¤«¤é¤â¾Ã¤¨¤ë¤ï¤±¤Ç¤Ï¤Ê¤¤¤Î¤Ç¡¢¤Õ¤¿¤¿¤Ó¥Þ¥Í¤ò¤¹¤ë¤è¤¦¤Ë¤Ê¤ë¤ï¤±¤Ç¤¹¤Í¡£
¡¡¤¿¤ÀƱ¤¸¿¶¤ëÉñ¤¤¤ò¤µ¤»¤¿¤¤¤À¤±¤Ç¤¢¤ì¤Ð¡¢Ã±½ã¤ËÊÒÊý¤Î¥ª¥Ö¥¸¥§¥¯¥È¤«¤é¤â¤¦ÊÒÊý¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤È¤¹¤Ù¤Æ¤Î¥×¥í¥Ñ¥Æ¥£¤ò¥³¥Ô¡¼¤·¤Æ¤·¤Þ¤¨¤ÐÎɤ¤ÏäǤ¹¡£
¡¡¤³¤Î¤è¤¦¤Ë´û¸¤Î¼ÂÁõ¥³¡¼¥É¤ò¡¢¤Þ¤Ã¤¿¤¯´Ø·¸¤Î¤Ê¤¤¥ª¥Ö¥¸¥§¥¯¥È´Ö¤ÇºÆÍøÍѤ¹¤ë¤È¤¤¤¦¤Î¤Ï¡¢·Ñ¾µ¤Ç¤Ï¤Ê¤¯Mix-in¡ÊRuby¤Îinclude¤È¤«¡Ë¤Î¹Í¤¨Êý¤Ç¤¹¡£
¡¡ÍøÍÑ¥±¡¼¥¹¤Ë¤è¤Ã¤Æ¤Ï¡¢Mix-in¤È·Ñ¾µ¤Ï¤Þ¤Ã¤¿¤¯Æ±¤¸¤è¤¦¤Ê·ë²Ì¤ò¤â¤¿¤é¤·¤Þ¤¹¡£
¡¡¤·¤«¤·¥×¥í¥È¥¿¥¤¥×·Ñ¾µ¤ò»È¤¦¤È¡¢¿Æ¤Ø¤Îµ¡Ç½³ÈÄ¥¡Ê¥á¥½¥Ã¥É¤ÎÄɲáˤ¬¡¢¤¹¤°¤µ¤Þ»Ò¶¡¤«¤é¤â»È¤¨¤ë¤è¤¦¤Ë¤Ê¤ë¤È¤¤¤¦ÅÀ¤¬Â礤ʰ㤤¤Ç¤¹¡£
¡¡¼Â¹Ô»þ¤Ë¡¢¥×¥í¥È¥¿¥¤¥×¥Á¥§¥¤¥ó¤ËÏ¢¤Ê¤Ã¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ä¤¤¤Æ¡¢°ìÅÙ¤ÎÊѹ¹¤Çµ¡Ç½¤òÄɲá¦Êѹ¹¤Ç¤¤Þ¤¹¡£
¡¡¤Þ¤¿¡¢¤É¤ì¤À¤±¤¿¤¯¤µ¤ó¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤¬ºî¤é¤ì¤Æ¤¤¤Æ¤â¡¢¤¿¤È¤¨»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤³¤È¤¬¤Ç¤¤Ê¤«¤Ã¤¿¤È¤·¤Æ¤â¡¢Êѹ¹¤Î±Æ¶Á¤òµÚ¤Ü¤¹¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡Mixi-in¤È¤Ï°ã¤Ã¤Æ¡¢¿Æ»Ò¥ª¥Ö¥¸¥§¥¯¥È´Ö¤ÇÆÃÊ̤Ê嫤¬¤Ç¤¤Æ¤¤¤ë·Ñ¾µ¤Ç¤Ê¤¯¤Æ¤Ï¡¢¤³¤¦½ÀÆð¤Ë¤Ï¤¤¤¤Þ¤»¤ó¤è¤Í¡£
¡¡¤·¤«¤·¡¢·Ñ¾µ¤¬¤«¤µ¤ó¤Ç¥×¥í¥È¥¿¥¤¥×¥Á¥§¥¤¥ó¤¬¤¢¤Þ¤ê¤ËŤ¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¤È¡¢¤º¤Ã¤È¿Æ¤ÎÂå¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥×¥í¥Ñ¥Æ¥£¤òõº÷¤¹¤ë¤Î¤Ë¿¤¯¤Î»þ´Ö¤¬¤«¤«¤Ã¤Æ¤·¤Þ¤¦¤³¤È¤Ë¤â¤Ê¤ê¤Þ¤¹¡£¡Ê¤³¤Î¤¢¤¿¤ê¤Ï½èÍý·Ï¤ÎºÇŬ²½¤Ë¤âÂ礤¯°Í¸¤·¤Þ¤¹¤¬¡Ë
¡¡¤À¤«¤é¤È¤¤¤Ã¤Æ¡¢¤Ê¤ó¤Ç¤â¤«¤ó¤Ç¤â¤½¤ì¤¾¤ì¤Î¥ª¥Ö¥¸¥§¥¯¥È¤¬¼«Ê¬¤Ç»ý¤Ã¤Æ¤¤¤Æ¤Ï¡¢¥á¥â¥ê¸úΨ¤â°¤¯¤Ê¤ë¤Ç¤·¤ç¤¦¤·¡¢·Ñ¾µ¤ò»È¤Ã¤¿½ÀÆð¤ÊµóưÊѹ¹¤â¤Ç¤¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¡¡·ë¶É¡¢·Ñ¾µ¤ÈMixi-in¤ÏŬºàŬ½ê¡£
¡¡¤½¤Î¾ì¤ÇÁê±þ¤·¤¤¤Û¤¦¤ò»È¤¤Ê¬¤±¤ë¤³¤È¤¬¤Ç¤¤Æ¤³¤½¡¢¿¿¤ÎJavaScripter¤È¤¤¤¦¤â¤Î¤Ç¤¹¤è¤Í¡ª
¥×¥í¥È¥¿¥¤¥×´Ø·¸¤òºî¤ì¤ë¤Î¤Ïnew¤À¤±¡Ê¤À¤Ã¤¿¡Ë
¡¡¤³¤³¤«¤é¤Ï¡¢¾å¤Ç»È¤Ã¤¿ Object.create
¤Îµ¡Ç½¤ò¡¢½¾Íè¤ÎJavaScript¤À¤±¤Ç¼ÂÁõ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡¡¤¤¤¤Ê¤ê¥³¡¼¥É¤Ç½ñ¤¯¤È¡¢¤³¤¦¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹:
Object.create = function ( o ) { function dummy(){} dummy.prototype = o; return new dummy(); }
¡Ê¢¨¼ÂºÝ¤Î Object.create
¤Ï¡¢Êѹ¹ÉÔ²Äǽ¤Ê¥×¥í¥Ñ¥Æ¥£¤òÄêµÁ¤Ç¤¤¿¤ê¤È¡¢3rd Edition¤ÎÈϰϤǤϷ褷¤Æ¼Â¸½¤Ç¤¤Ê¤«¤Ã¤¿µ¡Ç½¤â´Þ¤à¹âµ¡Ç½¤Ê¤â¤Î¤Ç¤¹¡ª¤³¤³¤Ç¤Ï¤¢¤¯¤Þ¤Ç¡¢¥×¥í¥È¥¿¥¤¥×¤Î·Ñ¾µ´Ø·¸¤Î¹½ÃۤΤߤ˾ÇÅÀ¤òÅö¤Æ¤Æ¤¤¤Þ¤¹¡£¡Ë
¡¡¶õ¤Î´Ø¿ô¤Ç¤¢¤ë dummy
¤ò new
¤·¤ÆÊÖ¤¹Á°¤Ë¡¢dummy
¤Î prototype
¥×¥í¥Ñ¥Æ¥£¤Ë¥×¥í¥È¥¿¥¤¥×¤È¤Ê¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òÀßÄꤷ¤Æ¤¤¤ë¤Î¤¬¥ß¥½¤Ç¤¹¡£
¡¡JavaScript¤Ç¤Ï¡¢ new F(ARGS)
¤È¤¤¤¦¼°¤Ï¡¢¼¡¤Î¤è¤¦¤Ë½èÍý¤µ¤ì¤Þ¤¹:
- ¿·¤·¤¤¶õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ë
- ¿·¤·¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¥×¥í¥È¥¿¥¤¥×¤È¤·¤Æ
F.prototype
¤òÀßÄꤹ¤ë -
F(ARGS)
¤ò¸Æ¤Ó½Ð¤¹¡£¤³¤Î»þ¡¢¸Æ¤Ó½Ð¤µ¤ì¦¤Îthis
¤ÎÃͤȤ·¤Æ¿·¤·¤¯ºî¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò»È¤¦ - 3¤Î·ë²Ì¤¬¥ª¥Ö¥¸¥§¥¯¥È¤À¤Ã¤¿¤é¡¢¤³¤ì¤ò·ë²Ì¤È¤·¤ÆÊÖ¤¹¡£
- ¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢1¤Çºî¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤¹ ¡¡µ¼»÷¥³¡¼¥ÉŪ¤Ë½ñ¤¯¤È¡¢¤³¤ó¤Ê¤«¤ó¤¸:
function new ( F, ARGS ) { var o = {}; o.__proto__ = F.prototype; var r = F.apply(o, ARGS); return r != null && r instanceof Object ? r : o; }
¡¡¤¢¤ì¡¢¤³¤³¤Ç»È¤Ã¤Æ¤ë __proto__
¤Ã¤Æ¡¢¤É¤³¤«¤Ç¸«¤¿¤³¤È¤¢¤ê¤Þ¤»¤ó¤«¡©
¡¡¤½¤¦¤Ç¤¹¡£·Ñ¾µ¤¹¤ë¥³¡¼¥É¤Ç¤¿¤Þ¤Ë½Ð¤Æ¤¯¤ë¤ä¤Ä¤Ç¤¹¤Í¡£Firefox¤È¤«Chrome¤È¤«¡¢ÆÃÄê¤Î½èÍý·Ï¤À¤±¤Ç»È¤¨¤Þ¤¹¡£
¡¡¼Â¤Ï¤³¤ì¤¬¡¢¾å¤Ç¸À¤Ã¤Æ¤¤¤¿¡Ö¥æ¡¼¥¶¤¬µ¤¤Å¤«¤Ê¤¤¤È¤³¤í¤Ç»ý¤Ã¤Æ¤¤¤ë±£¤·»²¾È¡×¤Î¤³¤È¤Ç¤¹¡£
¡¡½èÍý·Ï¤Ë¤è¤Ã¤Æ¤Ï¡¢¤³¤ì¤¬¥æ¡¼¥¶¤«¤éľÀÜ¿¨¤ì¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤Ç¤¹¤Í¡£
¡¡Ä¾Àܤ¤¤¸¤ì¤Á¤ã¤¨¤Ð¡¢¤â¤Ã¤ÈºÙ¤«¤¤À©¸æ¤â¤ä¤êÊüÂê¤Ê¤Î¤Ç¡¢¤³¤ì¤ÏÊØÍø¡ª¤Ê¤Î¤Ç¤¹¤¬¡¢¤â¤Á¤í¤ó¡¢¥Ö¥é¥¦¥¶´Ö¤Î¸ß´¹À¤¬Â»¤Ê¤ï¤ì¤ë¤Î¤Ç¡¢¤¢¤Þ¤ê¥ª¥¹¥¹¥á¤Ï¤·¤Þ¤»¤ó¡£
¡¡Èóɸ½à¤ÊAPI¤Ï¡¢¤Á¤ã¤ó¤È»È¤¨¤ë¾ì½ê¤È»È¤¤¤É¤³¤í¤È¤ò¤ï¤¤Þ¤¨¤Æ»È¤¤¤Þ¤·¤ç¤¦¤Í¡£JavaScripter¤È¤ÎÌó«¤À¤è¡ª
new¤¤¤é¤Ê¤¤»Ò(¥§
¡¡¾å¤Ç new
¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤Ë __proto__
¥×¥í¥Ñ¥Æ¥£¤ò»È¤¤¤Þ¤·¤¿¤¬¡¢ Object.create
¤òɸ½à¤Ç¼ê¤ËÆþ¤ì¤¿²æ¡¹¤Ïº£¤ä¡¢__proto__
¤ËÍê¤é¤º¤È¤â¥ª¥Ö¥¸¥§¥¯¥È¤Î¿Æ»Ò´Ø·¸¤òºî¤ì¤ëÎϤò¼ê¤Ë¤·¤¿¤Î¤Ç¤·¤¿¡£
¡¡¤Ä¤Þ¤ê¡¢new
¤ËÁêÅö¤¹¤ëµ¡Ç½¤òJavaScriptɸ½à¤Îµ¡Ç½¤À¤±¤Ç¼ÂÁõ¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¤¹¡ª
¡¡¤³¤ó¤Ê¤Õ¤¦¤Ë¡§
function New ( F, ARGS ) { var o = Object.create(F.prototype); var r = F.apply(o, ARGS); return r != null && r instanceof Object ? r : o; } function Cat ( name ) { this.name = name; } Cat.prototype.caterwaul = function(){ alert(this.name + "¡Ö¥Ë¥ã¡¼¥Ë¥ã¡¼¡×"); }; var cat = New(Cat, ["¥¿¥Þ"]); cat.caterwaul(); // ¥¿¥Þ¡Ö¥Ë¥ã¡¼¥Ë¥ã¡¼¡×
¡¡¾å¤Ç¤Ï new
¤ò»È¤Ã¤Æ Object.create
¤ò¼ÂÁõ¤¹¤ëÎã¤ò¼¨¤·¤Þ¤·¤¿¤¬¡¢º£²ó¤Ï¤½¤ÎµÕ¤Ç¤¹¡£
¡¡¤Ä¤Þ¤ê¡¢Object.create
¤¬ºÇ½é¤«¤é¤¢¤ì¤Ð¡¢new
¤Ã¤Æ¤¤¤é¤Ê¤«¤Ã¤¿¤Ã¤Æ¤³¤È¤Ç¤¹¤Í(>_<)
¼ØÂ¡§ ¤Ê¤ó¤Ç¤ï¤¶¤ï¤¶´Ø¿ô¤Î¥×¥í¥Ñ¥Æ¥£¤ò·Ðͳ¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤ë¤Î¡©
¡¡¤Ê¤ó¤Ç¤Ç¤·¤ç¤¦¤Í¡©
¡¡¤³¤³¤«¤é¤Ï¾¡¼ê¤Ë¿ä¬¤·¤Æ¤ß¤Þ¤¹¤¬¡¢¤¿¤Ö¤ó¡¢´Ø¿ô¤À¤±¤Ç¤Ê¤ó¤È¤«¤·¤ÆJava¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Î¸«¤¿Ìܤò¥Þ¥Í¤·¤¿¤«¤Ã¤¿¤ó¤¸¤ã¤Ê¤¤¤Ç¤·¤ç¤¦¤«¡©
¡¡ÉáÄ̤ϡ¢°ìÏ¢¤Îµ¡Ç½¤ò¤â¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò¤¿¤À¤Ò¤È¤Ä°ìÅÀʪ¤Çºî¤ë¡Ê¥·¥ó¥°¥ë¥È¥ó¥Ñ¥¿¡¼¥ó¤ß¤¿¤¤¤Ê¡Ë¥±¡¼¥¹¤è¤ê¤â¡¢Æ±¤¸µ¡Ç½¤ò¤â¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò¤¿¤¯¤µ¤óÎÌ»º¤¹¤ë¥±¡¼¥¹¤Î¤Û¤¦¤¬Â¿¤¤¤È»×¤¤¤Þ¤¹¡£
¡¡¤¹¤ë¤ÈÅöÁ³¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î½é´ü²½¤ò¹Ô¤¦½èÍý¤ò¥µ¥Ö¥ë¡¼¥Á¥ó²½¤·¤Æ¤ª¤¤¤Æ¡¢¤½¤ÎÃæ¤Ç¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤ÆÊÖ¤¹¤³¤È¤ò¹Í¤¨¤Þ¤¹¤è¤Í¡£
¡¡¤³¤ó¤Ê¤Õ¤¦¤Ë:
function bear ( name ) { var k = Object.create(mam); k.name = name; return k; } var kid = bear("¥¿¥é¥ª");
¡¡¤Ä¤Þ¤ë¤È¤³¤í¤³¤ì¤Ã¤Æ¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¤Ç¤¹¤è¤Í¡©
¡¡¤Þ¤¿°ìÊý¤Ç¡¢JavaScript¤Ï¤½¤Î½Ð¼«¤«¤é¡¢Java¤Ë¸«¤¿Ìܤò»÷¤»¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦½ÉÌ¿¤ò»ý¤Ã¤ÆÀ¸¤Þ¤ì¤Æ¤¤Þ¤·¤¿¡£¡Ê¤³¤Î¤¢¤¿¤ê¤Ï¡¢id:badatmath¤µ¤ó¤Î¥×¥ì¥¼¥ó»ñÎÁ ¤¬¤È¤Ã¤Æ¤â¤ï¤«¤ê¤ä¤¹¤¤¤Ç¤¹¡Ë
¡¡¤Ç¡¢Java¤Ã¤Æ¥³¥ó¥¹¥È¥é¥¯¥¿¤ò¸Æ¤Ó½Ð¤¹¤È¤¤Ë¤Ï new
¤ò¤Ä¤±¤Þ¤¹¤è¤Í¡©
¡¡¤½¤³¤Ç¡¢new
¤ò¤Ä¤±¤Æ´Ø¿ô¤ò¸Æ¤Ó½Ð¤·¤¿¤È¤¤ËÆÃÊ̤ʽèÍý¤ò»ý¤¿¤»¡¢´Ø¿ô¤Ë¥³¥ó¥¹¥È¥é¥¯¥¿¤È¥¯¥é¥¹¤Î£²¤Ä¤ÎÌò³ä¤ò²¡¤·ÉÕ¤±¤Æ¤·¤Þ¤ª¤¦¤È¹Í¤¨¤¿¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£
¡¡¤½¤¦¤Ê¤ë¤È¡¢Java¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤Ã¤Ý¤¯¸«¤»¤ë¤¿¤á¤Ë¤Ï¡¢´Ø¿ô¤¬ new
¤ò¤Ä¤±¤Æ¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤¤Ë¤Ï¡¢¿·¤·¤¤¥ª¥Ö¥¸¥§¥¯¥È¤¬Å¬Àڤˡʥץí¥È¥¿¥¤¥×¤«¤é·Ñ¾µ¤µ¤ì¤Æ¡Ëºî¤é¤ì¡¢this
¤Ë¥Ð¥¤¥ó¥É¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
¡¡¤½¤³¤Ç¡¢¤½¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¡Ê´Ø¿ô¡Ë¤¬¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ëºÝ¤Ë°ÅÌÛŪ¤Ë»È¤¦¥×¥í¥È¥¿¥¤¥×¤ò¡¢¥³¥ó¥¹¥È¥é¥¯¥¿¼«¿È¤Ë»ý¤¿¤»¤Æ¤ª¤³¤¦¡£¤Ç¤â¡¢¤É¤Î´Ø¿ô¤¬¥³¥ó¥¹¥È¥é¥¯¥¿¤È¤·¤Æ¸Æ¤Ó½Ð¤µ¤ì¤ë¤«¤Ï¤ï¤«¤é¤Ê¤¤¤«¤é¡¢¤¹¤Ù¤Æ¤Î´Ø¿ô¤Ë¥×¥í¥Ñ¥Æ¥£¤Ç»ý¤¿¤»¤Æ¤ª¤³¤¦¡£
¡¡¤Ã¤Æ¤¤¤¦¤³¤È¤Ë¤Ê¤Ã¤¿¤ó¤¸¤ã¤Ê¤¤¤«¤È¡£
¡¡¤¨¤Ã¡¢JavaScript¤ÏºÇ½é¤«¤é¥×¥í¥È¥¿¥¤¥×¥Ù¡¼¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤òºÎÍѤ¹¤ë¤Ä¤â¤ê¤À¤Ã¤¿¤Î¤«¤Ã¤Æ¡©
¡¡¤½¤ì¤Ï¤ï¤«¤ê¤Þ¤»¤ó¡£Sun Microsystems¤¬¥×¥í¥È¥¿¥¤¥×¥Ù¡¼¥¹¤Î»ÏÁĤǤ¢¤ëSelf¤Î¸¦µæ¼Ô¤òÊú¤¨¤Æ¤¤¤¿¤Ã¤Æ¤³¤È°Ê³°¡¢»ä¤ÏÃΤê¤Þ¤»¤ó¡£
¡¡³«È¯¼Ô¤ÎEich»á¤Ï¡¢ºÇ½é¤«¤éScheme¤Î¤è¤¦¤Ê´Ø¿ô·¿¸À¸ì¤òºî¤ë¤Ä¤â¤ê¤À¤Ã¤¿¤è¤¦¤Ç¤¹¤±¤É¤Í¡£
½ñ¤¤¤¿¤¢¤È¤Ë°ì¸À
¡¡¤¦¤ó¡ª
¡¡Ä¹¡¹¤È½ñ¤¤¤¿¤ï¤ê¤Ë¤Ï¡¢Á´Á³¤ï¤«¤ê¤ä¤¹¤¯¤Ê¤Ã¤Æ¤Ê¤¤µ¤¤¬¤¹¤ë¤Í(¡¡¦¦Ø¡¦¡®)