æ¦è¦
0chatã¯ä»¥åç´¹ä»ããSimplest HTML Chatã®CGIçã§ããã
Simplest HTML Chatã«ã¤ãã¦ã¯ä»¥åã®è¨äºã§ç´¹ä»ããããããã¡ãã£ã¨çãªHTMLãã£ããã顿ã«åå¼·ãã¦ããä¸ã§ããããã£ã¦HTMLãä½ãã»ãã軽ãããããªãã®?ãã¨æã£ãã®ãå½¢ã«ãããã®ãç¾ä»£ã«åç¾ãããã®ã§ããã
ãããä»ã®PureBuilder Simplyãªã©ã®äºåçææ¦ç¥ã®ãã¼ã¹ã«ãªã£ã¦ããã
åºæ¬çãªè§£èª¬
ããã¡ãã£ã¨ã¯2000å¹´åå¾ã«éçãèªã£ãPerl/CGIã®ãã£ããã¹ã¯ãªããã§ããã
ãã£ãããæµè¡ã£ã¦ãã彿ã§ã主æµã¨ããããã®ã§ãããå¤ãã®ãã£ããã¹ã¯ãªãããããã¡ãã£ã¨ã®æ§æããªã¹ãã¯ããã¦ããã
åºæ¬çã«ã¯HTMLãã¬ã¼ã ã使ç¨ãã¦ãããä¸é¨ãã¬ã¼ã ãçºè¨ç¨ã®ãã©ã¼ã ãä¸é¨ãã¬ã¼ã ããã°ã表示ãããã¼ã¸ã«ãªã£ã¦ããã
é常ã¯ä¸¡æ¹ã¨ãä¸èº«ã¯CGIã¹ã¯ãªããã§ããããã®ã«ãã£ã¦ã¯ä¸ä¸ãã¬ã¼ã ã§å¥ã®ã¹ã¯ãªãããå¼ã³åºããã®ããã£ãããããã¡ãã£ãã®å ´åã¯ä¸¡æ¹ã¨ãchat.cgiã«ãªã£ã¦ããã
ãã ããå
¥å®¤åã¯ä¸ãã¬ã¼ã ãenter.cgiã¨ãªã£ã¦ãããå
¥å®¤ããã¨chat.cgiã«åãæ¿ããä»çµã¿ã ã
ãã°å´HTMLã«ã¯HTML metaã§ã®ãªãã¼ããçµã¾ãã¦ãããè¡¨ç¤ºãæ´æ°ããã çºè¨æã®çºè¨ãã©ã¼ã ã®åé¤ã¯JavaScriptã§è¡ã£ã¦ããããããã¡ãã£ã¨ã«ã¯å¾ããå ¥ã£ããã®ã§ãã¦ã¼ã¶ã¼ã³ã³ããªãã¥ã¼ãã§ãã£ãããã ã
ãã°å½¢å¼ã¯å½æãããã£ããã¨ã³ããªãã¨ã<>ã§åºåã£ãCSVçãªãã¡ã¤ã«ã§ããã
éå¸¸ã«æåã§éçãèªã£ãã½ããã¦ã§ã¢ã§ããã«ãé¢ãããããã®æ´å²ãæ å ±ã¯ã©ãã«ãã¾ã¨ãããã¦ããããWikipediaã«ãé ç®ããªãã
ç§ã®èã
以åã®è¨äºã§ãè¿°ã¹ããããã¤ã³ãã¯ä»¥ä¸ã®éãã§ãã
- ãã£ããã¢ããªã¯è¤æ°äººã«çãã¹ãã³ã§ç¹°ãè¿ãå¼ã°ããããé常ã«è² è·ãéã
- ãµã¼ãã¹å´ã§ç¦æ¢ããããã¨ãããã»ã©ã§ããã500ã503ã«é¥ã£ã¦ãã
- åæã«æ¸ãè¾¼ã¾ãããªã©ã®åé¡ãè§£æ¶ããã¦ããªãå ´åãããããããã°ã£ã¦ããã
- ãã°ã®å½¢å¼çã«å¶éãããããã°ãã®ãã®ãã¨ã¦ãæ±ãã«ãã
- æ´æ°ããã¦ããã©ããã«é¢ãããã³ã³ãã³ããã¨ã£ã¦ãããã¼ãªã³ã°ã使ãã®ã§ãã¹ã¯ãªããã¯æ¸ãè¾¼ãé »åº¦ããèªã¿åºãã®é »åº¦ãå§åçã«é«ã
æå¾ããã¤ã³ãã§ããã¹ã¯ãªãããå§åçã« âèªã¿åºã > æ¸ãè¾¼ã¿â ãªã®ã§ããã°ãããHTMLãã¡ã¤ã«ã§ç¨æããã°è»½ãããããã¨ããããã§ããã
å®éã«ã¢ããã¤ãºãããã¤ã³ãã¯æ¬¡ã®éã
- ãã¼ã¿ãã¼ã¹ã¯Rubyã®ã·ãªã¢ã©ã¤ãºããªãã¸ã§ã¯ã
- çºè¨ãã¬ã¼ã ã¯éç
- ãã°ãã¬ã¼ã ãéç
- çºè¨ãã¬ã¼ã ã®formã®
targetãåç - ã¹ã¯ãªããã¯ãã°HTMLãæ´æ°ãããå¿çã¯
204
CGIç
CGIçã¯åã«CGIã«ãã¦ããããã§ã¯ãªããããè¸ã¿è¾¼ãã ã¢ããã¤ãºãè¡ã£ã¦ããã
両è ã®ã³ã¼ããæ¯ã¹ã¦ãããã¨ãããã¨æãã®ã ããWebrickçã¯æ¬å½ã«essentialãªè¨è¨ã«ãªã£ã¦ãã¦ãå¯è½ãªéã端çãªã³ã¼ãã§äºåçææ¦ç¥ããã£ããã§ã(ããããã£ããã ãããã)æå¹ã§ãããã¨ã示ãã¦ããã ããã¨æ¯ã¹ãã¨CGIçã¯æããã«ã³ã¼ããé·ãã
CGIçã® â0chatâ ã¯ããã¢ç¨ã ããå®ç¨ãããªãã¨å¼·èª¿ãã¦ããããã©ããããã¯DDOSæ»æãã¡ãã»ã¼ã¸ã®é£æããµã¼ãã¼è² è·ã¨è»¢ééãªã©ç¾ä»£çãªåé¡ã«å¯¾ãã¦å¯¾å¿ãã¦ããªãããã§ãã£ã¦ãã»ãã¥ãªãã£çã«åé¡ãããã¨ãããããã§ã¯ãªããããã¯ä¸å¿æä½éã®é æ ®ããã¦ããã®ã§ãå°ãªãã¨ãã¬ã¬ã·ã£ãªPerl/CGIãã£ããã¹ã¯ãªãã並ã«ã¯åä½ããã
ãããªãã¢ããã¤ãºã§äºåçææ¦ç¥ã®å¯è½æ§ã示ããã®ã¯æ¬¡ã®ç¹ã ã
- ãåæã¨ãã¦ååãå ¥åããããããã®ç¶æ å¤é·ãJavaScriptã§è¡ã
- ãã°ã¤ã³è¡¨ç¤ºããçºè¨ãã¬ã¼ã å ã§ã®ã¦ã¼ã¶ã¼å表示ãJavaScriptã§è¡ã
- ã¡ãã»ã³ã¸ã£ã¼ã¢ããªã§ä¸è¬çãªããã°ã¯ä¸ããä¸ãçºè¨ã¦ã£ã³ãã¦ã¯ä¸ã仿§
ã¡ãªã¿ã«ãStellaã®UIã¯ãã¬ã¼ã ã¯ä½¿ã£ã¦ããªããããã°ã¯ãã¼ã·ã£ã«ã§åãã®ã§ãå¥ã«ç§ãããããå®è£ ãã§ããªãããã§ã¯ãªããããã¾ã§ããã¬ã¬ã·ã£ãªHTMLãã£ãããªãäºåçææ¦ç¥ã§ã¤ã±ããã¨ãã話ãããããã«ãããã¦ããã ãã ã
0Chatã®å®è£
çºè¨ãã¬ã¼ã ã®ç¶æ å¤é·
çºè¨ãã¬ã¼ã å
ã®å
¨ã¦ã®ç¶æ
ãé表示ã¯ã©ã¹ã®sectionãããã¯ã¨ããç¾å¨ã®ç¶æ
ã¨ãªããããã¯ã®ã¿ãJavaScriptã«ãã£ã¦å¯è¦ã¨ãããå¤é·ããã¨ãã¯å
¨ã¦ã®ãããã¯ã対象ã«ä¸åº¦é表示ã«ãã¦ããã²ã¨ã¤ã ããå¯è¦ã¨ããã
ãã®ãããJavaScriptãæå¹ã§ãªãã¨ããããæ©è½ããªãããã®ãã£ããã¯å ¨é¢çã«JavaScriptã«é ¼ã£ã¦ããã
ãã°ã¤ã³å¦ç
ååå ¥åãããã¯ã®è¡¨ç¤ºç¶æ ããæããå¦çã«ããã¦ããçºè¨ãããã¯å ã®ãã©ã¼ã ã«å¤ãã»ããããsubmitãããã¨ããæ¹æ³ã§ãã°ã¤ã³è¡¨ç¤ºãè¡ã£ã¦ããã
ãã®ããã«å³å¯ãªãã®ã§ã¯ãªããããã¨ãã¨HTMLãã£ããã¯ãã·ã£ãã¼å ¥å®¤ããå¯è½ãªãã®ã§ãã£ãããããããããããªã¹ãã¯ãããã¨è¨ãããå³å¯ãªå ¥å®¤ãå¿ è¦ã¨ãããããªç®¡çã¯ä¼¼ã¤ãããããªãã
æ®éã«ä½¿ã£ã¦ããã¨ãåå表示ããæããããã«ã¯ãã®å¦çãçµç±ããªããã°ãªããªãã®ã§ãã¨ã¯ã¹ããªã¨ã³ã¹ä¸ã®åé¡ã¯ãªãããã¡ãããåé¿ããæ¹æ³ã¯ãããã§ãããã
ãã°ã®æ´æ°ã¨ã¦ã£ã³ãã¦ä½ç½®
ããã¯ãå®ã¯ãã¡ããã¡ãè¦å´ããã
ãã¤ã³ãã«ãªã£ãã®ã¯Location.reload()ã§ãããLocation.href=ãLocation.replaceã§åä¸ã®ã¢ãã¬ã¹ãåãã¼ãããã¨ãã«scope.setTimeout()ãå度å¼ã³åºãããªããã¨ããåé¡ã«èºãã¦ããã®ã ã
ã¾ããããã·ã¥ãªã³ã¯ã¤ãã®ã¢ãã¬ã¹ãåãã¼ãããã¨ãã¦ããã®è¦ç´ ã«é£ã¶ãã¨ã¯ãªãã
æ¬æ¥ã¯HTML metaã§refreshãããã®ã ããWebrickçã§ã¯ãã®ããã«ãã¦ãããã0Chatã¯ã©ã®ã¿ã¡JavaScriptãªãã«ã¯åããªãã®ã§ãJavaScriptã§å¦çãããã¨ã«ãã¾ãèºèºãã¯ãªãã£ãã
window.setTimeout((function() {
window.location.reload(true)
document.getElementById("lastmsg").scrollIntoView(true)
}), 10000 )ãªãã¼ããã¦ã¹ã¯ãã¼ã«ããã
ã¡ãªã¿ã«ãLocation.reload()ã§ãªãã¼ãããå ´åã¯å®è¡ä¸ã®JavaScriptã¯æå¹ãªã®ã§ãããã¯ã¡ããã¨æ©è½ããã
å®éã®ã³ã¼ãã§ã¯ããã¼ã¸ããã ã«ããªããã°ã¹ã¯ãã¼ã«ããªãããã«ãªã£ã¦ããã
window.setTimeout((function() {
window.location.reload(true)
if (onBottom) { document.getElementById("lastmsg").scrollIntoView(true) }
}), 10000 )onBottomã¯scrollã«å¯¾ããã¤ãã³ãã¨ãã¦ããã¼ã¸ã®ä¸ç«¯ã«ãããã©ããããã»ãããã¦ããã
ã©ããã£ã¦ãã£ã¦ãããã¨ããã¨ã
function takeoffFromBottom() {
if (window.innerHeight - document.getElementById("lastmsg").getBoundingClientRect().y > -20) {
onBottom = true
} else {
onBottom = false
}
}getBoundingClientRect().yã¯ãã¥ã¼ãã¼ãä¸ç«¯ããè¦ç´ ã®ä¸ç«¯ã¾ã§ã®è·é¢ã§ããã
ã ããããã®å¤ããã¥ã¼ãã¼ãã®é«ãããã大ãããã°ãç»é¢ã®ä¸ç«¯ãããä¸ã«ãããã¨ãããã¨ã«ãªãã
ãã®ãããwindow.innerHeightããå¼ããã¨ãã«è² ã®å¤ã«ãªãã®ã§ããã°ãè¦ç´ ã¯ç»é¢å
ã«ããã
ã¿ã¼ã²ãããå®å
¨ãªä¸ç«¯ã§ã¯ãªãã®ã§å¸ãè¾¼ã¿ã¯ããã®ã ããããå°ãã ãå¸ãè¾¼ãããã«ãã¦ããã
ãç§»åããã®ã¯ãã¼ã¸æ´æ°ãã¦ãããªãã ãããæ°ããçºè¨ããã£ããä¸ç«¯ãããªãããããã¨æã£ãããã®ã¢ãã¿ã
åè¿°ã®ã¨ãããLocation.reload()ã§ãªãã¼ãããããã¼ã¸ã«å¯¾ãã¦ãªãã¼ãããåã®ãã¼ã¸ã§å¼ã³åºãããJavaScriptãå®è¡ããããJavaScriptã¯ã·ã³ã°ã«ã¹ã¬ããã§åä½ããããããªãã¼ãããããã¼ã¸ã®JavaScriptãå®è¡ãããã®ã¯ãã®å®è¡ãçµäºããå¾ã§ãããã ãããonBottomã®ã»ããã¯ãªãã¼ãåã®ãã¼ã¸ã§è¡ãããå¤ã使ããããã¨ã«ãªãã®ã§å¤§ä¸å¤«ã ã
è¶ ã¢ãã³ãªã¬ããã½ãã
ãã¢ããªã±ã¼ã·ã§ã³ã¨ãã¦ã®æ©è½ãã¯ã©ã¤ã¢ã³ããµã¤ãJavaScriptã§å®è£ ãããã¨ããã®ã¯Stellaã§ä½¿ç¨ããã¢ã¤ãã£ã¢ã§ãå人çã«ã¯çµæ§ãããããã¨æãã ã¾ããTwitterã¨ãFacebookã¨ããJavaScriptã§å®è£ ãã¦ãããã®ãã¾ãã¾ãããããããã¾ã§æ¬æ°ã§ã¯ãªããããããªãããã©ã
ãã ãé常ã¯ãµã¼ãã¼ãµã¤ãã§å¦çãããå¤ã®çæããã¯ã©ã¤ã¢ã³ããµã¤ãã§ããããã¨ããã®ãé¢ç½ãã¨æãã®ã ã ã»ãã¥ãªãã£çã«åé¡ã«ãªããªããã¨ãåæã¨ãã¦ãã ãã
ãã®ã¢ããªã±ã¼ã·ã§ã³ã¯Ruby 2.7ã§æ¸ãããCSSãé§ä½¿ãJavaScriptã§é§åããç¾ä»£çãªææ³ãç¨ãã¦(Vanilla JSã ã)ããã³ãã¬ã¼ãã¨ã³ã¸ã³ã«ããçæãæ´»ããã¦ããHTMLãã¬ã¼ã ãç¨ãã¦ãã°ãã¼ã¸ããªãã¼ãããè¶ å¤å ¸çãªããCGIã®ããã£ãããå®è£ ãã¦ããã
ãã«ãã«ããããã ããåå¨ä¾¡å¤ã¯ãªããªãé«ãã®ã§ã¯ãªãã ãããã ããã¯ãã¬ãããªãã®ãä»ã«ä¼ãããã¨ããæå³ãããããã©ãããããããã¯ããã¸ã¼ã¯æµè¡çè¦ç´ ã«ãã£ã¦ããããæ£ãããããããã®ãã¢ãã³ã ãã¨ããæµãã«å¾ã£ã¦åãã¦ãã¦ãããã(ç¹ã«webã¾ããã¯)ããã®ã¨ããã®ã¨ãã®ã¢ããã¼ãã®å®ç¾ææ®µãæåãã©ãããã¨ããæ¤è¨¼ã¯ããã¾ããããªãã å®éãããããHTMLãã£ããã ã£ã¦ãããªãã«é·ãéç¶ããããã©ããä¼¼ããããªã³ã¼ãã§ãããä¾ãã°DBMã使ãã¨ããUIãæ¹åããã¨ãããããã£ããä¸ããããæ¡ä»¶ãããã¯ãããã¨ãããã®ã¯ãã»ã¨ãã©åºã¦ããªãã£ãã
ã ããããããããã¨ãã¯ãããããµãã«ãã¾ãããªãã¦ããä¸ã«æµããææ³ããªããã®ã§ã¯ãªããæ¬è³ªãèãã¦å·¥å¤«ãã¦çã¿åºãã¦ãããã§ã©ãã !!ãã¨è¨ã£ã¦ãããã¨ã¯ãææç¾©ãªãã¨ãªããããªããã¨ç§ã¯æãã®ã ã
åéãããªãã§æ¬²ããã®ã ãã(PureBuilder Simplyãããã§ããããã«)ããããæ§æ¥ãããããã®ãæ´»ãããã¢ããã¼ãã®ã»ããåªãã¦ãããã¨ãã話ããã¦ããããã§ã¯ãªãããã®ã¢ããã¼ããå ¨ä½ã§è¦ãæã«æåã§ã¯ãªãã®ã¯æããã§ãããå½è©²æ¡ä»¶ä¸ã§hackããããã ãããã®æ¡ä»¶ãã®ãã®ããçæªãªå¶ç´ããªã®ã¯æãããªã®ã§ããã
æå¤§ã®åé¡ã¯ãé »ç¹ã«åå¾ããããã°ã®ããã«é »ç¹ã«ã¹ã¯ãªãããå¼ã³åºããããã¨ããåé¡ã ããããã¯ä¸»ã«CGIã®èµ·åã®ä»çµã¿ä¸é »ç¹ã«å¼ã°ãããã¨ãåé¡ãªã®ã§ãããCGIã§ãªããã°ããã¾ã§åé¡ã§ã¯ãªãã ããã¦ããã¼ã¢ã³ããã»ã¹ã¨ãã¦èµ·åãã¦ãããã£ãããµã¼ãã¼ã«å¯¾ãã¦æ¥ç¶ããã®ã§ããã°ãåé¡ã«ãªãã®ã¯ã©ã¡ããã¨ããã°è»¢éè² è·ã§ãããã ããã転éè² è·è»½æ¸ã®ããã«ãã¼ãªã³ã°ãªããã³ã°ãã¼ãªã³ã°ãªãããããã¯æ¥ç¶ãã£ã±ãªããªãã§ãã¼ã·ã£ã«è»¢éããã»ãããã£ã¨è¯ãã
ã§ããã°ããã¼ã¸ãã®ãã®ãã¢ããªã±ã¼ã·ã§ã³ã«ãã£ã¦çæããããã¨ã¯ããã»ã©é大ãªåé¡ã§ã¯ãªãã ããã¯ãæåã«ä¸åº¦çæããã ãã§ãããé »ç¹ã«ãã¼ã¸ãçæããããã§ã¯ãªãããã ã
ããã«ãã£ã¦ããã¼ã¸å ã«å¿ è¦ãªãã©ã¡ã¼ã¿(ä¾ãã°ã»ãã·ã§ã³ID)ãå«ããããã»ããçãããã¢ã¯ã»ã¹(大éã®ãªã¯ã¨ã¹ããå«ã)ãå¼¾ããã¨ã容æã«ãªãããããããã¨ãèããã°ãç¾ä»£çãªæè¡ã¨ãã¼ãºãè¸ã¾ããã°æããã«ãã£ã¡ã®å®è£ ã®ã»ããæã¾ããã
ãã ããåªããç¹ããªãããã§ã¯ãªããããããç¾ä»£çãªä»æ§ã¯ãµã¼ãã¼ãµã¤ãã«æ·±ãå ¥ãè¾¼ãã§ããããã®æ§ç¯ã¯é£æåº¦ãå°ã é«ããå人ã¬ãã«ã§å±éããã«ã¯CGIã¯å®¹æãªææ³ã§ãããã¾ãCGIã«ãã£ã¦å¯è½ã§ãããã¨ã§ãã¼ã¹ã¨ãã¦å©ç¨ã§ãããµã¼ãã¹ãå¢ããã¨ããé¢ãããã
ãã ããããããè¦ããé¨åã¯ããããã®ä»æ§ã®CGIã§ã¢ãã³ãªè¦æ±ãæºãããã¨ã¯ããªãé£ããããµã¼ãã¼ãµã¤ãã§å¶éãããããªããVPSã§éå¶ããã®ã§ããã°ãããã©ã¼ãã³ã¹é¢ãªã©ãèããªããã°Webrickã§ç°¡åã«å®è£ å¯è½ã§ããããã®ã»ããä½è² è·ã«ãããã¨ãã»ãã¥ã¢ã«ãããã¨ã容æãªã®ã ã ãã®ãããã¯å¶ä½è ã®ã¬ãã«ã«ããããä»åã®0Chatã«é¢ãã¦ã¯ããã¯ããã¸ã¼ã¨ã¢ããã¼ããè¦ãããã¨ãã以ä¸ã®æå³ã¯ãªãã¨è¨ã£ã¦ããã
ä½è« JavaScriptã®é¢æ°ã®ãã¤ã³ãã£ã³ã°
ä¾ãã°
$id = document.getElementByIdã®ããã«document.getElementByIdã®å¥å(ã¨ã¤ãªã¢ã¹)ãã¤ãããã¨ãã£ã¦ã
$id("FooElement")ã¯ã¨ã©ã¼ã«ãªããã¨ããåé¡ãããã ããã«ã¤ãã¦ã¡ãã£ã¨èª¿ã¹ãããã¦ãã§çå¤ããªèª¬æã°ããã並ãã ã®ã§ãããã§è»½ã解説ãã¦ãããã¨æãã
ãªãã¸ã§ã¯ãæåã«ãããã¡ã½ããã¨ããã®ã¯ãç¹å®ã®ã¬ã·ã¼ã(æ®éã¯ãªãã¸ã§ã¯ã)ã«bindããã¦ããã
// heyã¡ã½ããã¯fooãªãã¸ã§ã¯ãã«å±ãã¦ãã
foo.hey()ä¾ãã°æ¬¡ã®Rubyã³ã¼ã
class A
def initialize
@param = "AAA"
end
def hey
puts @param
end
end
a = A.new
a.hey
meth = a.method(:hey)
meth.()ã®å ´åãmethã«a.heyã代å
¥ãã¦å¼ã³åºãã¦ããããããã¯AAAã¨è¡¨ç¤ºãããã
ãã®Aã¯ãªãã¸ã§ã¯ãaã®ã¤ã³ã¹ã¿ã³ã¹å¤æ°@paramã§ãããåã«heyã¡ã½ããã代å
¥ãã¦ããããã§ã¯ãªãããã®ã¡ã½ããã«ã¯ãã¬ã·ã¼ããaã§ãããã¨ããæ
å ±ãå«ã¾ãã¦ãããã¨ããããã
ããããããã®ã¡ã½ããã¯aã«bindããã¦ãããã¨ãããã¨ã§ããã1
JavaScriptã«ã¯ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨ããæ¦å¿µããªãã®ã§ããªãã¸ã§ã¯ãããããã£ã«ããå¿
è¦ãããã
ããã¦ããªãã¸ã§ã¯ãããããã£ã¯ã¬ã·ã¼ããªãã«å¼ã³åºããã¨ãã§ããªãã®ã§ãthisãã¼ã¯ã¼ãã使ããã¨ã«ãªãã
a = {
a: "AAA",
hey: function() { console.log("HEY " + this.a) }
}thisãä½ãæããã¯åçã ãä¾ãã°
a = {
a: "AAA",
hey: function() { console.log("HEY " + this.a) }
}
// a.hey() 㯠HEY AAA ã¨æ¸ã
b = { a: "BBB" }
b.hey = a.hey
// b.hey() 㯠HEY BBB ã¨æ¸ã
c = { c: "CCC" }
c.hey = a.hey
// c.hey() 㯠this.a === c.a ãåå¨ããªãããã¨ã©ã¼ã«ãªãã¨ãããã¨ã§ããã
ã°ãã¼ãã«ãªãªãã¸ã§ã¯ãã ã¨ãããã«ããã ãããããä»®ã«ããã§ã¯globalãªãã¸ã§ã¯ãã使ããã
global = {}
global.id = document.getElementByIdã¨ããå ´åãglobal.idã¨ãã¦document.getElementByIdã® é¢æ°ã¯ 代å
¥ããããã getElementByIdã®ä¸ã§å¼ã°ããthisã¯globalãªãã¸ã§ã¯ãã«ãªãã
getElementByIdã¯Document.getElementByIdã§ããããããã¿ã¤ããã§ã¼ã³ã«Documentãå«ãã§ããªããã°ãªããªããã¨ããããglobalã®ãããã¿ã¤ããã§ã¼ã³ã«ã¯Documentãå«ã¾ãã¦ããªãã®ã§ãgetElementByIdãæ©è½ããªãã
ãã®ããã«ãã®ã¡ã½ããã®ã¹ã³ã¼ããåºå®ããã¦ããªããã®ããunboundãªã¡ã½ãããã¨ããã
Rubyã§ã¯Method#unbindã使ã£ã¦unboundãªã¡ã½ãããä½ããã¨ã¯ã§ããããunboundãªã¡ã½ãããèµ·åãããã¨ã¯ã§ããªãã
JavaScriptã®é¢æ°ã¯é常unboundã§ããã
Function.prototype.bind()ã¡ã½ããã使ããã¨ã§ç¹å®ã®ãªãã¸ã§ã¯ãã«bindããthisãã¼ã¯ã¼ããæããã®ãåºå®ãããã¨ãã§ããã
ã¤ã¾ãã
global = {}
global.id = document.getElementById.bind(document)ã¨ããã°ãglobal.id()ã®ä¸ã®thisã¯å¸¸ã«documentã«ãªãã
ãã®è¨ãæ¹ã¯å°ãé£ãããbindã®éå»åè©å½¢ã¯boundãªã®ã§ããbindããã¦ããããªã®ããboundããã¦ããããªã®ããããããéå»åè©å½¢ãæ®éã«-edå½¢ã§ããåèªã§éå»åè©å½¢ã§è¨ããã¨ã¯ãã¾ããªãã®ã§ããbindããã¦ãããã¨ããè¨ãæ¹ã«ãããâ©ï¸