- ç絡
- èªåã¬ããŒãžã³ã¬ã¯ã·ã§ã³
- ã¯ããŒãžã£ãŒãäœæãã
- ã¯ããŒãžã£ãŒã§äœãã§ããŸããïŒ
- äŸ1ïŒé¢æ°åç §ã䜿çšããsetTimeout
- äŸ2ïŒé¢æ°ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã¡ãœããã«é¢é£ä»ãã
- äŸ3ïŒçžäºæ¥ç¶ãããæ©èœã®ã«ãã»ã«å
- ä»ã®äŸ
- ã©ã³ãã éå
- Internet Explorerã®ã¡ã¢ãªãªãŒã¯ã®åé¡
ç絡
èªåã¬ããŒãžã³ã¬ã¯ã·ã§ã³
ECMAScriptã¯èªåã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã䜿çšããŸãã ä»æ§ã§ã¯è©³çŽ°ãå®çŸ©ãããŠããªããããéçºè ã¯ããã«å¯ŸåŠããå¿ èŠããããäžéšã®å®è£ ã§ã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³æäœãã»ãšãã©éèŠèŠããŠããªãããšãç¥ãããŠããŸãã ããããäžè¬çãªèãã¯ããªããžã§ã¯ããåç §ããããšãäžå¯èœã«ãªã£ãå ŽåïŒå®è¡å¯èœã³ãŒãã§äœ¿çšå¯èœãªåç §ãæ®ã£ãŠããªãããïŒãã¬ããŒãžã³ã¬ã¯ã¿ãŒããã³äœããã®æç¹ã§åé€ããããªãœãŒã¹ã§äœ¿çšã§ããããã«ãªããšããããšã§ãã䜿çšããã解æŸãããåå©çšã®ããã«ã·ã¹ãã ã«æ»ãããŸãã
ååãšããŠãããã¯å®è¡ã³ã³ããã¹ããé¢ããçŽåŸã«çºçããŸãã ã¹ã³ãŒãæ§é ãã¢ã¯ãã£ããŒã·ã§ã³/å€æ°ãªããžã§ã¯ããããã³é¢æ°ãªããžã§ã¯ããå«ãå®è¡ã³ã³ããã¹ãã§äœæããããªããžã§ã¯ãã¯ã¢ã¯ã»ã¹ã§ããªããªããã¬ããŒãžã³ã¬ã¯ã¿ãŒãå©çšã§ããããã«ãªããŸãã
ã¯ããŒãžã£ãŒãäœæãã
ãã®é¢æ°åŒã³åºãããé¢æ°åŒã³åºãã®å®è¡ã®ã³ã³ããã¹ãã§äœæãããé¢æ°ãªããžã§ã¯ããè¿ããããã¹ããããé¢æ°ãžã®ãªã³ã¯ãå¥ã®ãªããžã§ã¯ãã®ããããã£ã«å²ãåœãŠããããšãã¯ããŒãžã£ãŒã圢æãããŸãã ãŸãã¯ããã®ãããªé¢æ°ãªããžã§ã¯ããããšãã°ã°ããŒãã«å€æ°ãã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªãªããžã§ã¯ãã®ããããã£ããŸãã¯å€éšé¢æ°åŒã³åºããžã®åŒæ°ãšããŠåç §ã«ãã£ãŠæž¡ããããªããžã§ã¯ããžã®åç §ãçŽæ¥å²ãåœãŠãããšã«ãã£ãŠã
function exampleClosureForm(arg1, arg2){ var localVar = 8; function exampleReturned(innerArg){ return ((arg1 + arg2)/(innerArg + localVar)); } /* , exampleReturned */ return exampleReturned; } var globalVar = exampleClosureForm(2, 4);
ããã§ã exampleClosureFormã®åŒã³åºããå®è¡ããã³ã³ããã¹ãã§äœæãããé¢æ°ãªããžã§ã¯ãã¯ãã°ããŒãã«å€æ°ã«ãã£ãŠåç §ããããŸã å©çšå¯èœã§ãããããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã«ãã£ãŠåŠçã§ããŸããããã®ãªããžã§ã¯ãã¯globalVarïŒnïŒãåŒã³åºããããšãã«ãå®è¡ã§ããŸãã
ããããã°ããŒãã«å€æ°globalVarã¯é¢æ°ãªããžã§ã¯ããåç §ããããããã®ãªããžã§ã¯ãã¯[[scope]]ããããã£ã§äœæãããäœæãããå®è¡ã³ã³ããã¹ãã«å±ããã¢ã¯ãã£ããŒã·ã§ã³/å€æ°ãªããžã§ã¯ããå«ãã¹ã³ãŒããã§ãŒã³ãåç §ãããããã°ããŒãã«ãªããžã§ã¯ããå«ãïŒã ã¢ã¯ãã£ããŒã·ã§ã³/å€æ°ãªããžã§ã¯ãã¯ã¬ããŒãžã³ã¬ã¯ã¿ãŒã§åŠçã§ããã globalVarã§åç §ãããé¢æ°ãªããžã§ã¯ããå®è¡ããããšã [[scope]]ããããã£ã§åç §ãããã¹ã³ãŒããã§ãŒã³å šäœãæ¯åäœæãããå®è¡ã³ã³ããã¹ãã®ã¹ã³ãŒãã«è¿œå ãããŸãé¢æ°ãªããžã§ã¯ããåŒã³åºããŸãã
ã¯ããŒãžã£ãŒãäœæãããŸãã ãã¹ããããé¢æ°ã®ãªããžã§ã¯ãã«ã¯èªç±å€æ°ãããããã®é¢æ°ã®å¯èŠæ§ã®ãã§ãŒã³ã«ããã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã/å€æ°ã¯ãããããæ¥ç¶ããåªäœã§ãã
ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã/å€æ°ããã©ãããããã®ã¯ã ãããžã®åç §ã¯ã globalVarå€æ°ã«ãã£ãŠåç §ãããé¢æ°ãªããžã§ã¯ãã®å éš[[scope]]ããããã£ã«å²ãåœãŠãããã¹ã³ãŒããã§ãŒã³ã«å«ãŸããŸãã ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã/å€æ°ã¯ããã®ç¶æ ãšãšãã«ä¿åãããŸãã ããããã£ã®å€ã䜿çšããŸãã å éšé¢æ°ã®åŒã³åºãã®å®è¡å®è¡ã³ã³ããã¹ãã®ã¹ã³ãŒãã解決ããããã»ã¹ã§ã¯ããã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã/å€æ°ã®ååä»ãããããã£ã«å¯Ÿå¿ããèå¥åããåã«ãã®ãªããžã§ã¯ãã®ããããã£ãšããŠèšç®ãããŸãã ãããã®ããããã£ã®å€ã¯ãäœæãããå®è¡ã³ã³ããã¹ããçµäºããåŸã§ãèªã¿åãããã³èšå®ã§ããŸãã
äžèšã®äŸã§ã¯ããã®ã¢ã¯ãã£ããŒã·ã§ã³/å€æ°ãªããžã§ã¯ãã¯ãå€éšé¢æ°ãå®äºããïŒå®è¡ã³ã³ããã¹ããçµäºããïŒæç¹ã§ã®ä»®ãã©ã¡ãŒã¿ãŒã®å€ãå éšé¢æ°ãšããŒã«ã«å€æ°ã®å®çŸ©ãè¡šãç¶æ ãæã¡ãŸãã arg1ããããã£ã®å€ã¯2 ã arg2ã®å€ã¯4 ã localVarã®å€ã¯8ã exampleReturnedããããã£ã¯ãå€éšé¢æ°ããè¿ããããã¹ããããé¢æ°ã®ãªããžã§ã¯ããžã®åç §ã§ãã ïŒä»¥äžã§ã¯ã䟿å®äžããã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã\å€æ°ãActOuter1ãšããŠç€ºããŸããïŒ
ããäžåºŠexampleClosureFormãåŒã³åºããš
var secondGlobalVar = exampleClosureForm(12, 3);
-æ°ããã¢ã¯ãã£ãåãªããžã§ã¯ãã䜿çšããŠãæ°ããå®è¡ã³ã³ããã¹ããäœæãããŸãã ãããŠãåŒæ°å€arg1-12ããã³arg2-3ãæã€2çªç®ã®å®è¡ã³ã³ããã¹ãããã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ããå«ãã¹ã³ãŒããã§ãŒã³ãåç §ãããç¬èªã®åå¥ã®ããããã£[[scope]]ã§æ°ããé¢æ°ãªããžã§ã¯ããè¿ãããŸãã ïŒä»¥äžã§ã¯ã䟿å®äžããã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã\å€æ°ãActOuter2ãšããŠç€ºããŸããïŒ
exampleClosureFormãžã®2åç®ã®åŒã³åºãã«ãã£ãŠã2çªç®ã®ç°ãªãã¯ããŒãžã£ãŒãäœæãããŸããã
ããããglobalVarãšsecondGlobalVarã§åç §ãããexampleClosureFormãå®è¡ããŠäœæããããããã®é¢æ°ãªããžã§ã¯ãã¯äž¡æ¹ãšããåŒïŒïŒarg1 + arg2ïŒ/ïŒinnerArg + localVarïŒïŒãè¿ããŸãã 4ã€ã®èå¥åã«å¯ŸããŠè€æ°ã®ã¹ããŒãã¡ã³ããå®è¡ããŸãã ãããã®èå¥åã®èšç®æ¹æ³ã«ãã£ãŠãã¯ããŒãžã£ã®ç®çãšæå³ã決ãŸããŸãã
globalVar ïŒ globalVarïŒ2ïŒã«ãã£ãŠåç §ãããé¢æ°ãªããžã§ã¯ãã®å®è¡ãæ€èšããŠãã ããã æ°ããå®è¡ã³ã³ããã¹ããäœæãããã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ãïŒActInner1ãšåŒã³ãŸãããïŒããå®è¡ãããé¢æ°ãªããžã§ã¯ãã®[[scope]]ããããã£ãåç §ããã¹ã³ãŒããã§ãŒã³ã®å é ã«è¿œå ãããŸãã ActInner1ã¯ãä»®ãã©ã¡ãŒã¿ãŒã«åŒæ°2ã®å€ãå²ãåœãŠãããåŸã«innerArgããããã£ãååŸããŸãã æ°ããå®è¡ã³ã³ããã¹ãã®ã¹ã³ãŒããã§ãŒã³ã¯ãActInner1-> ActOuter1->ã°ããŒãã«ãªããžã§ã¯ãã«ãªããŸãã
èå¥ååã¯ããã®æ¹æ³ã§ã¹ã³ãŒããã§ãŒã³ãéããŠè§£æ±ºãããŸãã åŒïŒïŒarg1 + arg2ïŒ/ïŒinnerArg + localVarïŒïŒã®å€ãè¿ãããã«ããããã®èå¥åã®å€ã¯ãã¹ã³ãŒããã§ãŒã³ããåãªããžã§ã¯ãã®èå¥åã«å¯Ÿå¿ããååãæã€ããããã£ãé çªã«æ€çŽ¢ããããšã§æ±ºå®ãããŸãã
ãã§ãŒã³ã®æåã®ãªããžã§ã¯ãã¯ActInner1ã§ãå€ã2ã® innerArgããããã£ããããŸãã æ®ãã®3ã€ã®èå¥åã¯ãActOuter1ã®ååä»ãããããã£ã«å¯Ÿå¿ããŠããŸãã å€ã2ã® arg1 ã arg2ã¯4 ã localVarã¯8ã§ãã é¢æ°åŒã³åºãã¯ïŒïŒ2 + 4ïŒ/ïŒ2 + 8ïŒïŒãè¿ããŸãã
ãããã secondGlobalVarã§åç §ãããå¥ã®åäžã®é¢æ°ãªããžã§ã¯ãã®å®è¡ãšæ¯èŒããŠãã ããïŒ secondGlobalVarïŒ5ïŒ ã æ°ããå®è¡ã³ã³ããã¹ãActInner2ã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ãã«ååãä»ããŸãããã§ãŒã³ã¯ãActInner2-> ActOuter2->ã°ããŒãã«ãªããžã§ã¯ãã®ããã«ãªããŸãã ActInner2ã¯innerArgã5ãšããŠè¿ããActOuter2ã¯arg1 ã arg2ããã³localVarããããã12ã3ããã³8ãšããŠè¿ããŸãã æ»ãå€ïŒ ïŒïŒ12 + 3ïŒ/ïŒ5 + 8ïŒïŒ ã
secondGlobalVarãå床å®è¡ãããšãã¹ã³ãŒããã§ãŒã³ã®å é ã«æ°ããã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ãã衚瀺ãããŸãããActOuter2ã¯ãã§ãŒã³å ã®æ¬¡ã®ãªããžã§ã¯ãã®ãŸãŸã§ããããã®ååä»ãããããã£ã®å€ã¯èå¥åarg1 ã arg2ããã³localVarã®è§£æ±ºã«åã³äœ¿çšãããŸãã
ãã®ããã«ããŠãECMAScriptã®ãã¹ããããé¢æ°ã¯ãä»®ãã©ã¡ãŒã¿ãŒããã¹ããããé¢æ°ã®å®£èšãããã³äœæãããå®è¡ã³ã³ããã¹ãã®ããŒã«ã«å€æ°ãžã®ã¢ã¯ã»ã¹ãåãåããä¿æããŸãã ãããã£ãŠãã¯ããŒãžã£ãäœæãããšããã®ãããªé¢æ°ãªããžã§ã¯ãã¯ãããã®å€ãåç §ãç¶ããååšããŠããéã«ããããèªã¿åã£ãŠå€æŽããããšãã§ããŸãã ãã¹ããããé¢æ°ãäœæãããå®è¡ã³ã³ããã¹ãã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã/å€æ°ã¯ããã¹ããããé¢æ°ãžã®ãã¹ãŠã®åç §ã解æŸãããé¢æ°ãªããžã§ã¯ããåç §ããããŸã§ãé¢æ°ãªããžã§ã¯ãã®[[scope]]ããããã£ãåç §ããã¹ã³ãŒãã®ãã§ãŒã³ã«æ®ããŸãã¬ããŒãžã³ã¬ã¯ã¿ãŒã§äœ¿çšã§ããªããªããŸãïŒä»åŸãã¹ã³ãŒããã§ãŒã³å ã®ãã¹ãŠã®ãªããžã§ã¯ããšäžç·ã«äžèŠã«ãªããŸãïŒã
å ¥ãåé¢æ°èªäœã«å ¥ãåé¢æ°ãå«ããããšãã§ããŸãã ã¯ããŒãžã£ãŒã圢æããããã«é¢æ°ã«ãã£ãŠè¿ããããã¹ããããé¢æ°ã¯ããã¹ããããé¢æ°ãè¿ããã¯ããŒãžã£ãŒãäœæã§ããŸãã æ·»ä»ãã¡ã€ã«ããšã«ãã¹ã³ãŒããã§ãŒã³ã¯ããã¹ããããé¢æ°ãªããžã§ã¯ããäœæãããå®è¡ã³ã³ããã¹ããšå ±ã«çºçããè¿œå ã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ããåãåããŸãã ECMAScriptä»æ§ã§ã¯ã ã¹ã³ãŒããã§ãŒã³ãæéã§ããããšãå¿ èŠã§ããããã®é·ãã«å¶éã¯ãããŸããã ãããããå®éã®ããã€ãã®å®è£ ã«ã¯ããã€ãã®å¶éããããŸããããããŸã§ã®ãšããç¹å®ã®æ°éã®å ±åã¯ãããŸããã§ããã ã©ããããæ©èœã®ãããªãæè³ã®å¯èœæ§ã¯ã誰ããå¿ èŠãšãããããå€ãã§ãã
ã¯ããŒãžã£ãŒã§äœãã§ããŸããïŒ
å¥åŠã«æãããããããŸãããããã®è³ªåã«å¯Ÿããçãã¯çµ¶å¯Ÿã«ãã¹ãŠã§ãã ç§ã¯ãã¯ããŒãžã£ãŒã«ãã£ãŠECMAScriptãäœã§ããšãã¥ã¬ãŒãã§ããããã«ãªããšããäºå®ã«ã€ããŠè©±ããŠããŸããå¶éã¯ããã®ãšãã¥ã¬ãŒã·ã§ã³ãèæ¡ããŠå®è£ ããèœåã«ã®ã¿ãããŸãã ããã¯å°ããããã«ããã®ã§ããã£ãšå®çšçãªãã®ããå§ããæ¹ãè¯ããããããŸããã
äŸ1ïŒé¢æ°åç §ã䜿çšããsetTimeout
ã¯ããŒãžã£ãŒã¯ãå®è¡åã«å®è¡ããé¢æ°ã®ãã©ã¡ãŒã¿ãŒãæäŸããããã«ãã䜿çšãããŸãã ããšãã°ãé¢æ°ãsetTimeouté¢æ°ã®æåã®åŒæ°ãšããŠæž¡ãå¿ èŠãããå Žåãããã¯Webãã©ãŠã¶ãŒç°å¢ã§äžè¬çã§ãã
setTimeoutã¯ãããªç§åäœã§è¡šãããééïŒ2çªç®ã®åŒæ°ããïŒã®åŸãæåã®åŒæ°ããã¢ã¯ã»ã¹å¯èœãªé¢æ°ïŒãŸãã¯ã³ãŒãã®javascriptè¡ã§ããããã®å Žåã¯ããã§ã¯ãããŸããïŒã®å®è¡æéãèšå®ããŸãã setTimeoutã䜿çšããã«ã¯ããã®é¢æ°ãåŒã³åºããŠãé¢æ°ãªããžã§ã¯ããžã®åç §ãæåã®åŒæ°ãšããŠãããªç§åäœã®ééã2çªç®ãšããŠæž¡ãå¿ èŠããããŸãããé¢æ°ãªããžã§ã¯ããžã®åç §ã«ã¯ããã®é¢æ°ã®ã¹ã±ãžã¥ãŒã«ãããå®è¡ã®ãã©ã¡ãŒã¿ãŒãå«ããããšã¯ã§ããŸããã
ãã ãããã¹ããããé¢æ°ã®ãªããžã§ã¯ããžã®åç §ãè¿ãå¥ã®é¢æ°ãåŒã³åºãããšãã§ããŸãããã®é¢æ°ã¯ã setTimeouté¢æ°ãžã®åç §ã«ãã£ãŠæž¡ãããŸãã ãã¹ããããé¢æ°ã§äœ¿çšããããã©ã¡ãŒã¿ãŒã¯ããããè¿ãé¢æ°ãåŒã³åºããããšãã«éä¿¡ãããŸãã setTimoutã¯åŒæ°ãæž¡ããã«ãã¹ããããé¢æ°ãå®è¡ããŸããããã®ãã¹ããããé¢æ°ã¯ããããè¿ããå€éšé¢æ°ãåŒã³åºãããšã§æäŸããããã©ã¡ãŒã¿ãŒã«åŒãç¶ãã¢ã¯ã»ã¹ã§ããŸãã
function callLater(paramA, paramB, paramC){ /* , : */ return (function(){ /* setTimeout, , , */ paramA[paramB] = paramC; }); } ... /* , , . , , . : */ var functRef = callLater(elStyle, "display", "none"); /* setTimeout, , funcRef, : */ hideMenu=setTimeout(functRef, 500);
äŸ2ïŒé¢æ°ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã¡ãœããã«é¢é£ä»ãã
é¢æ°ãªããžã§ã¯ããžã®åç §ãå²ãåœãŠãããé¢æ°ãå°æ¥ã®ããæéåŸã«å®è¡ãããå Žåãä»ã®å€ãã®ç¶æ³ããããŸãããã®å Žåããã®é¢æ°ã®å®è¡ã®ããã®ãã©ã¡ãŒã¿ãŒãæºåãããšäŸ¿å©ã§ããå®è¡æã«ç°¡åã«ã¢ã¯ã»ã¹ã§ããŸããããå²ãåœãŠã®ç¬éãŸã§äžæã§ãã
1ã€ã®äŸã¯ãç¹å®ã®DOMèŠçŽ ãšã®çžäºäœçšãã«ãã»ã«åããããã«èšèšãããjavascriptãªããžã§ã¯ãã§ãã ãã®DOMèŠçŽ ã®å¯Ÿå¿ããã€ãã³ããããªã¬ãŒããããšãã«å®è¡ããdoOnClick ã doMouseOver ãããã³doMouseOutã¡ãœãããå«ãŸããŠããŸãããããŸããŸãªDOMèŠçŽ ã«é¢é£ä»ããããã«äœæãããjavascriptãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã¯ããã€ã§ããããåã ã®ãªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã¯ãããã®æ¹æ³ãç¥ããªãå ŽåããããŸãããããäœæãããã³ãŒãã«é©çšãããŸãã ãããã®ãªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã¯ãã°ããŒãã«ã«åç §ãããæ¹æ³ã決å®ã§ããŸããã ã©ã®ã°ããŒãã«å€æ°ïŒååšããå ŽåïŒã«ããããžã®åç §ãå²ãåœãŠããããã¯ããããŸããã
ãããã£ãŠãåé¡ã¯ãã€ãã³ããåŠçããé¢æ°ã®å®è¡ã«ãããŸããé¢æ°ã¯ãjavascriptãªããžã§ã¯ãã®ç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ã«é¢é£ä»ãããããã®ãªããžã§ã¯ãã®ã©ã®ã¡ãœãããåŒã³åºãå¿ èŠãããããèªèããŠããŸãã
次ã®äŸã§ã¯ããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãèŠçŽ ã®ã€ãã³ããã³ãã©ãŒã«é¢é£ä»ããã¯ããŒãžã£ã«åºã¥ãåçŽãªæ±åé¢æ°ã䜿çšããŸãã ã€ãã³ããã³ãã©ãŒãå®è¡ãããšãã€ãã³ããªããžã§ã¯ããšé¢é£ä»ããããèŠçŽ ãžã®åç §ãæž¡ããããªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ã®ç¹å®ã®ã¡ãœãããåŒã³åºããããã®ã¡ãœããã«ãã£ãŠè¿ãããå€ãè¿ããããšããŸãã
/* , . . obj, , , methodName - . */ function associateObjWithEvent(obj, methodName){ /* , , , DOM : */ return (function(e){ /* , e , DOM, , IE, , */ e = e||window.event; /* obj, methodName , , , this ( , .. , ) */ return obj[methodName](e, this); }); } /* - , DOM , ID . , , onclick, onmouseover onmouseout, . */ function DhtmlObject(elementId){ /* , DOM ( null, ) ID , . el. */ var el = getElementWithId(elementId); /* el boolean if , el , , null - . , , el DOM. */ if(el){ /* , associateObjWithEvent, ( this) , , . associateObjWithEvent , DOM . javascript . */ el.onclick = associateObjWithEvent(this, "doOnClick"); el.onmouseover = associateObjWithEvent(this, "doMouseOver"); el.onmouseout = associateObjWithEvent(this, "doMouseOut"); ... } } DhtmlObject.prototype.doOnClick = function(event, element){ ... // doOnClick. } DhtmlObject.prototype.doMouseOver = function(event, element){ ... // doMouseOver. } DhtmlObject.prototype.doMouseOut = function(event, element){ ... // doMouseOut. }
ãããã£ãŠãã°ããŒãã«ãªåå空éã«åœ±é¿ãäžããã ã DhtmlObjectã®ä»ã®ã€ã³ã¹ã¿ã³ã¹ãšè¡çªãããããããšãªãã DhtmlObjectã®ã€ã³ã¹ã¿ã³ã¹ãDOMèŠçŽ ã«é¢é£ä»ããããšãã§ããä»ã®ã³ãŒãã«ãã䜿çšæ¹æ³ãèæ ®ããå¿ èŠã¯ãããŸããã
äŸ3ïŒçžäºæ¥ç¶ãããæ©èœã®ã«ãã»ã«å
ã¯ããŒãžã£ãŒã䜿çšããŠãçžäºæ¥ç¶ããçžäºäŸåããã³ãŒããã°ã«ãŒãåããè¿œå ã®ã¹ã³ãŒããäœæããŠãå¶çºçãªçžäºäœçšã®ãªã¹ã¯ãæå°éã«æããããšãã§ããŸãã æååãäœæããé¢æ°ããããé£çµæäœã®ç¹°ãè¿ãïŒããã³å€ãã®äžéæååã®äœæïŒãé¿ããããã«ãé åã䜿çšããŠæååã®äžéšãç¹å®ã®é åºã§ä¿åãã Array.prototype.joinã䜿çšããŠçµæãåºåããããšããå§ãããŸãïŒåŒæ°ãšããŠç©ºã®æååã䜿çšããŸãïŒã é åã¯åºåã®ãããã¡ãŒãšããŠäœ¿çšãããŸãããé¢æ°å ã§ããŒã«ã«ã«å®çŸ©ãããŠããå Žåãé¢æ°ãå®è¡ããããã³ã«åäœæãããŸããããã¯ãé¢æ°ã®åŒã³åºãããšã«é åã®å€æ°ã®å 容ã®ã¿ãå€æŽãããå Žåã¯äžèŠã§ãã
1ã€ã®æ¹æ³ã¯ããã®é åã®ã°ããŒãã«å€æ°ãäœæããŠãæ¯å䜿çšãããã³ã«åäœæããå¿ èŠããªãããã«ããããšã§ãã ãã ãããã®åŸããããã¡é åã䜿çšããé¢æ°ãåç §ããã°ããŒãã«å€æ°ã«å ããŠãé åèªäœãåç §ããå¥ã®ã°ããŒãã«ããããã£ããããŸãã ãã®çµæãã³ãŒããå¶åŸ¡ããããšãããå°é£ã«ãªããŸã;ä»ã®å Žæã§äœ¿çšããå Žåãäœæè ã¯é¢æ°å®çŸ©ãšé åå®çŸ©ã®äž¡æ¹ãè¿œå ããå¿ èŠãããããšãèŠããŠããå¿ èŠããããŸãã ãŸãããã®ãããªã³ãŒãã¯ãé¢æ°åã®äžææ§ã確èªããããšã«å ããŠããã®é¢æ°ãäŸåããé åã®ååãã°ããŒãã«åå空éã«ãäžæã§ããããšã確èªããå¿ èŠããããããä»ã®ã³ãŒããšçµã¿åãããããšãå°é£ã§ãã
ã¯ããŒãºãããšããããã¡ãŒé åãããã«äŸåããé¢æ°ã«é¢é£ä»ããããšãã§ããŸãïŒãããŠãã¡ããšããã±ãŒãžåã§ããŸãïŒãåæã«ãåå空éã®ç«¶åãã©ã³ãã ãªçžäºäœçšã®ãªã¹ã¯ãªãã«ãã°ããŒãã«åå空éã®å€éšã«é åã«èšå®ãããããããã£åãä¿åã§ããŸãã
ããªãã¯ã¯ããšã¯ã¹ãã¬ãã·ã§ã³é¢æ°ã«çµã¿èŸŒã¿ïŒã€ã³ã©ã€ã³ïŒå®è¡ããããšã«ããã1ã€ã®è¿œå ã®å®è¡ã³ã³ããã¹ããäœæããããšã§ããããã«ãããå€éšã³ãŒãã§äœ¿çšããããã¹ããããé¢æ°ãè¿ãããŸãã ãããã¡ãŒé åã¯ãçµã¿èŸŒã¿ïŒã€ã³ã©ã€ã³ïŒå®è¡ã䌎ãåŒé¢æ°ã®ããŒã«ã«å€æ°ãšããŠå®çŸ©ãããŸãã å®è¡ã¯1åè¡ããããããé åã¯1åã ãäœæãããŸãããããã«äŸåããé¢æ°ã¯ç¹°ãè¿ã䜿çšã§ããŸãã
次ã®ã³ãŒãã§ã¯ãã»ãšãã©å€æŽãããªãHTMLæååãè¿ãé¢æ°ãäœæãããŸããããã®æåã·ãŒã±ã³ã¹ã«ã¯ãé¢æ°ãåŒã³åºããããšãã«ãã©ã¡ãŒã¿ãŒãä»ããŠã¢ã¯ã»ã¹å¯èœãªå€æ°æ å ±ãå«ãŸããŠããå¿ èŠããããŸãã
ãã¹ããããé¢æ°ãªããžã§ã¯ããžã®åç §ã¯ãåŒé¢æ°ã«çµã¿èŸŒãŸããå®è¡ããè¿ãããã°ããŒãã«å€æ°ã«å²ãåœãŠãããŸãããããã£ãŠããã®é¢æ°ãªããžã§ã¯ãã¯ã°ããŒãã«é¢æ°ãšããŠåŒã³åºãããšãã§ããŸãã ãããã¡é åã¯ãå€éšåŒé¢æ°ã®ããŒã«ã«å€æ°ãšããŠå®çŸ©ãããŸãã ã°ããŒãã«åå空éã«é 眮ãããŠããããããã䜿çšããé¢æ°ã®åŒã³åºãããšã«åäœæãããŸããã
/* getImgInPositionedDivHtml -, -. HTML, DIV, IMG, . */ var getImgInPositionedDivHtml = (function(){ /* bufferAr - , - . , .. . - , . */ var buffAr = [ '<div id="', '', // 1, DIV ID '" style="position:absolute;top:', '', // 3, DIV top 'px;left:', '', // 5, DIV left 'px;width:', '', // 7, DIV width 'px;height:', '', // 9, DIV height 'px;overflow:hidden;\"><img src= '', // 11, IMG URL '\" width= '', // 13, IMG width '\" height= '', // 15, IMG height '\" alt= '', // 17, IMG alt '\"><\/div>' ]; /* , -. getImgInPositionedDivHtml(...) */ return (function(url, id, width, height, top, left, altText){ /* */ buffAr[1] = id; buffAr[3] = top; buffAr[5] = left; buffAr[13] = (buffAr[7] = width); buffAr[15] = (buffAr[9] = height); buffAr[11] = url; buffAr[17] = altText; /* , ( , ) */ return buffAr.join(''); }); // -. })(); /*^^- (inline) - */
1ã€ã®é¢æ°ãå¥ã®ïŒãŸãã¯è€æ°ã®ïŒé¢æ°ã«äŸåããŠãããããããã®ä»ã®é¢æ°ãä»ã®ã³ãŒãã§çŽæ¥åŒã³åºãããããšãæå³ããŠããªãå Žåãåãææ³ã䜿çšããŠãããã®é¢æ°ããªãŒãã³ã¢ã¯ã»ã¹ã®1ã€ã«ã°ã«ãŒãåã§ããŸãããããã£ãŠãè€éãªå€æ©èœããã»ã¹ããç°¡åã«ç§»æ€ã§ããã«ãã»ã«åãããã³ãŒãã¢ãžã¥ãŒã«ã§äœæãããŸãã
ãã®ä»ã®äŸ
ãããããã¯ããŒãžã£ãŒã®æãæåãªã¢ããªã±ãŒã·ã§ã³ã®1ã€ã¯ãDouglas Crockford ECMAScriptãªããžã§ã¯ãã§ãã©ã€ããŒãã€ã³ã¹ã¿ã³ã¹å€æ°ããšãã¥ã¬ãŒãããææ³ã§ããECMAScriptãªããžã§ã¯ãã®ãã©ã€ããŒãéçã¡ã³ããŒã®ãšãã¥ã¬ãŒã·ã§ã³ãå«ããçµã¿èŸŒã¿ã®ã¢ã¯ã»ã·ããªãã£ãšå¯èŠæ§ãå«ãããããçš®é¡ã®ã¹ã³ãŒãæ§é ã§æ¡åŒµã§ããŸãã
ã¯ããŒãžã£ãŒã¢ããªã±ãŒã·ã§ã³ã¯ç¡æ°ã«ãããŸãããããããã©ã®ããã«æ©èœããããç解ããããšããããããããããã©ã®ããã«äœ¿çšã§ããããç解ããããã®æè¯ã®ã¬ã€ãã§ãã
ã©ã³ãã éå
åã蟌ãŸããé¢æ°ãããããäœæãããé¢æ°ã®æ¬äœã®å€éšã§ã¢ã¯ã»ã¹å¯èœã«ãããšãã¯ããŒãžã£ãŒã圢æãããŸãããããã£ãŠãã¯ããŒãžã£ãŒã¯éåžžã«ç°¡åã«äœæã§ããŸãããã®çµæãã¯ããŒãžã£ãŒãèšèªã®æ©èœã§ããããšãç解ããŠããªãjavascriptéçºè ã¯ãã¯ããŒãžã£ãŒãäœæãããããšãçµæã«ãªãå¯èœæ§ãããããšãèªèããã«ãæãããªçµæãªãã§ããŸããŸãªã¿ã¹ã¯ã«åã蟌ã¿é¢æ°ã䜿çšããŸãã
å¶çºçãªã¯ããŒãžã£ã®äœæã«ã¯ã次ã®ã»ã¯ã·ã§ã³ã§èª¬æããIEã®ã¡ã¢ãªãªãŒã¯åé¡ãªã©ã®å¯äœçšããããŸãããŸããã³ãŒãã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸããçç±ã¯ãã¯ããŒãžã£ãŒèªäœã§ã¯ãªããå®éãæ éã«äœ¿çšãããšãã¯ããŒãžã£ãŒã¯å¹æçãªã³ãŒãã®äœæã«å€§ããè²¢ç®ããå¯èœæ§ããããŸãããã€ã³ãã¯ãã¹ããããé¢æ°ã«ããããã®äœ¿çšã¯å¹çã«åœ±é¿ããå¯èœæ§ããããŸãã
ãã¹ããããé¢æ°ãDOMèŠçŽ ã®ã€ãã³ããã³ãã©ãŒãšããŠäœ¿çšãããå Žåãäžè¬çãªæ¹æ³ã§ããããšãã°ã次ã®ã³ãŒãã䜿çšããŠãonclickã€ãã³ããã³ãã©ãŒããªã³ã¯èŠçŽ ã«è¿œå ã§ããŸãã
/* , href */ var quantaty = 5; /* ( linkRef), onclick, quantaty href , true, , , href, . */ function addGlobalQueryOnClick(linkRef){ /* linkRef true ( , ) */ if(linkRef){ /* - onclick */ linkRef.onclick = function(){ /* - href , */ this.href += ('?quantaty='+escape(quantaty)); return true; }; } }
addGlobalQueryOnClické¢æ°ãåŒã³åºããããã³ã«ãæ°ãããã¹ããããé¢æ°ãäœæãããŸãïŒå²ãåœãŠããããšãã«ã¯ããŒãžã£ãŒã圢æãããŸãïŒãå¹çã®èŠ³ç¹ãããaddGlobalQueryOnClickã1åãŸãã¯2åã ãåŒã³åºããããã©ããã¯é¢ä¿ãããŸããããé¢æ°ãéäžçã«äœ¿çšãããå Žåãå€ãã®åå¥ã®é¢æ°ãªããžã§ã¯ããäœæãããŸããïŒå éšåŒé¢æ°ã®èšç®ããšã«1ã€ïŒã
äžèšã®ã³ãŒãã¯ãå éšé¢æ°ãäœæãããé¢æ°ã®å€ã§å©çšå¯èœã«ãªã£ããšããäºå®ïŒã€ãŸããã¯ããŒãžã£ãŒã®çµæïŒãå©çšããŠããŸãããã€ãã³ããã³ãã©ãŒãšããŠåå¥ã«äœ¿çšããé¢æ°ãå®çŸ©ãããã®é¢æ°ãžã®ãªã³ã¯ãã€ãã³ããã³ãã©ãŒã®ããããã£ã«å²ãåœãŠãããšã§ããŸã£ããåãå¹æãå®çŸã§ããŸããåäžã®é¢æ°ãªããžã§ã¯ããäœæããããã®ã€ãã³ããã³ãã©ãŒã䜿çšãããã¹ãŠã®èŠçŽ ã¯ããã®åäžã®é¢æ°ãžã®ãªã³ã¯ã䜿çšããŸãã
/* , href */ var quantaty = 5; /* ( linkRef), onclick, quantaty href , true, , , href, . */ function addGlobalQueryOnClick(linkRef){ /* linkRef true ( , ) */ if(linkRef){ /* , , . */ linkRef.onclick = forAddQueryOnClick; } } /* , , href . */ function forAddQueryOnClick(){ this.href += ('?quantaty='+escape(quantaty)); return true; }
æåã®ããŒãžã§ã³ã®ãã¹ããããé¢æ°ã¯ããã®äœ¿çšã«ãã£ãŠäœæãããã¯ããŒãžã£ãŒã䜿çšããããšãæå³ããŠããªãããããã¹ããããé¢æ°ã䜿çšããããããã£ãŠæ¬è³ªçã«åäžã®é¢æ°ãªããžã§ã¯ãã®ã»ãããäœæããããã»ã¹ãç¹°ãè¿ããªãã»ããå¹ççã§ãã
åæ§ã®ååãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãªããžã§ã¯ãã«é©çšãããŸãã次ã®ã³ã³ã¹ãã©ã¯ã¿ãŒæ§é ã«äŒŒãã³ãŒãã衚瀺ãããããšã¯çãããããŸããã
function ExampleConst(param){ /* - */ this.method1 = function(){ ... // }; this.method2 = function(){ ... // }; this.method3 = function(){ ... // }; /* . */ this.publicProp = param; }
ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠãæ°ããExampleConstïŒnïŒãå®è¡ããŠãªããžã§ã¯ããäœæãããã³ã«ãã¡ãœãããšããŠæ©èœããé¢æ°ãªããžã§ã¯ãã®æ°ããã»ãããäœæãããŸããã€ãŸããããå€ãã®ãªããžã§ã¯ãã€ã³ã¹ã¿ã³ã¹ãäœæããããšãããå€ãã®å¯Ÿå¿ããé¢æ°ãªããžã§ã¯ããäœæãããŸãã
ãã°ã©ã¹ã¯ããã¯ãã©ãŒãã®javascriptãªããžã§ã¯ãã®ãã©ã€ããŒããã£ãŒã«ãããšãã¥ã¬ãŒãããææ³ã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒå ã§äœæããããªããžã§ã¯ãã®ãªãŒãã³ããããã£ã«ãã¹ããããé¢æ°ã®ãªããžã§ã¯ããžã®åç §ãå²ãåœãŠãçµæãšããŠçããã¯ããŒãžã£ãŒã䜿çšãããŸãããã ãããªããžã§ã¯ãã®ã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãŒå ã§åœ¢æãããã¯ããŒãžã£ãŒãå©çšããªãå Žåãåã€ã³ã¹ã¿ã³ã¹ã«è¿œå ã®é¢æ°ãªããžã§ã¯ããäœæãããšããªããžã§ã¯ãã®äœæããã»ã¹ãé ããªããããå€ãã®ãªãœãŒã¹ãå¿ èŠã«ãªããŸãã
ãã®å Žåãé¢æ°ãªããžã§ã¯ããäžåºŠäœæããã³ã³ã¹ãã©ã¯ã¿ãŒã®ãããã¿ã€ããªããžã§ã¯ãã®å¯Ÿå¿ããããããã£ã«ããããžã®åç §ãå²ãåœãŠããšããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠäœæããããã¹ãŠã®ãªããžã§ã¯ãã§äœ¿çšã§ããŸãã
function ExampleConst(param){ /* */ this.publicProp = param; } /* - prototype */ ExampleConst.prototype.method1 = function(){ ... // }; ExampleConst.prototype.method2 = function(){ ... // }; ExampleConst.prototype.method3 = function(){ ... // };
Internet Explorerã®ã¡ã¢ãªãªãŒã¯ã®åé¡
Internet Explorerãã©ãŠã¶ïŒããŒãžã§ã³4ã6ïŒãã¹ãæã¯çŸåšã®ããŒãžã§ã³ã¯6ïŒã§ãã¹ãæžã¿ïŒã«ã¯ãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã·ã¹ãã ã«æ¬ é¥ããããŸãããããã®ç°å¢ãªããžã§ã¯ãããå圢ããªã³ã¯ã®äžéšã§ããå ŽåãECMAScriptãªããžã§ã¯ããšäžéšã®ç°å¢ãªããžã§ã¯ãã®åŠçã劚ããããŸãããã®å Žåã®ç°å¢ãªããžã§ã¯ãã¯ãDOM Nodeãªããžã§ã¯ãïŒããã¥ã¡ã³ããªããžã§ã¯ããšãã®åå«ãå«ãïŒããã³ActiveXãªããžã§ã¯ããšããŠç解ãããŸãã埪ç°ãªã³ã¯ã«ãããã®1ã€ä»¥äžãå«ãŸããŠããå Žåãåå ããŠãããªããžã§ã¯ãã¯ã©ãã解æŸãããããããã䜿çšããã¡ã¢ãªã¯ãã©ãŠã¶ãéãããããŸã§ã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã
埪ç°åç §ãšã¯ã2ã€ä»¥äžã®ãªããžã§ã¯ããéå§ç¹ã«ã€ãªããããã«çžäºã«åç §ããå Žåã§ããããšãã°ããªããžã§ã¯ã1ã«ãªããžã§ã¯ã2ãåç §ããããããã£ãããããªããžã§ã¯ã2ã«ãªããžã§ã¯ã3ãåç §ããããããã£ãããããªããžã§ã¯ã3ã«ãªããžã§ã¯ã1ãåç §ããããããã£ãããå ŽåãçŽç²ãªECMAScriptãªããžã§ã¯ãã®å Žåããªããžã§ã¯ã1 2ãŸãã¯3ãä»ã®ãªããžã§ã¯ãã¯åç §ãåæ¢ããçžäºã«åç §ããã ãã§ãããšããäºå®ãèªèãããã¬ããŒãžã³ã¬ã¯ã¿ãŒã§äœ¿çšã§ããããã«ãªããŸãããã ããInternet Explorerã®å Žåããããã®ãªããžã§ã¯ãã®å°ãªããšã1ã€ãDOM NodeãŸãã¯ActiveXãªããžã§ã¯ãã§ããå Žåãã¬ããŒãžãã³ãã©ãŒã¯ããã®åŸªç°é¢ä¿ãã·ã¹ãã ã®ä»ã®éšåããåé¢ãããŠããããšã確èªã§ããããããã解æŸããŸãã代ããã«ããã©ãŠã¶ãéãããããŸã§ããããã¯ãã¹ãŠã¡ã¢ãªã«æ®ããŸãã
ã¯ããŒãžã£ãŒã¯ã埪ç°åç §ã®äœæã«éåžžã«é©ããŠããŸããããšãã°ãã¯ããŒãžã£ãŒãäœæããé¢æ°ã®ãªããžã§ã¯ããDOM Nodeãªããžã§ã¯ãã®ã€ãã³ããã³ãã©ãŒãšããŠå²ãåœãŠããããã®ããŒããžã®ãªã³ã¯ããã®é¢æ°ã®ã¹ã³ãŒãå ã®ã¢ã¯ãã£ããŒã·ã§ã³ãªããžã§ã¯ã/å€æ°ã®ããããã£ã®1ã€ã«å²ãåœãŠãããŠããå Žåã埪ç°ãªã³ã¯ã衚瀺ãããŸãã DOM_Node.onevent-> function_objectã[[Scope]]-> scope_chain-> Activation_object.nodeRef-> DOM_Nodeãããã¯éåžžã«ç°¡åã§ããããã¹ãŠã®ããŒãžã«å ±éã®ã³ãŒãã®äžéšã§ãã®ãããªãªã³ã¯ã圢æãããµã€ããå°ãèŠããšãã»ãšãã©ã®ã·ã¹ãã ã¡ã¢ãªïŒå Žåã«ãã£ãŠã¯ãã¹ãŠïŒã䜿çšã§ããŸãã
IEã§onunloadã€ãã³ãã䜿çšããŠã€ãã³ããåŠçããæ©èœãžã®ãªã³ã¯ããªã»ãããããªã©ã埪ç°ãªã³ã¯ã®äœæãé¿ããåé¿ã§ããªãå Žåã¯ä¿®æ£æªââ眮ãè¬ããå¿ èŠããããŸããåé¡ãç¹å®ããã¯ããŒãžã£ïŒããã³ãã®ã¡ã«ããºã ïŒãç解ããããšã§ãIEã§ãã®åé¡ãåé¿ã§ããŸãã
ãªãã£ãŒãã»ã³ãŒã³ãã©ãŒãã«ãã£ãŠæžãããŸããã2004幎3æã
ä¿®æ£ããã³ææ¡è ïŒ
Martin Honnenã
ã€ã³ã»ãšã«ã¯ã³ã»ããªãªïŒããïŒã
ã©ãã»ã»ã©ã€ãã·ã¥ã¿ã€ã³ã»ããŒã«ã»ã³ãïŒç絡æ€åºïŒ
ãã€ã¯ã·ããã³ã
ãžã§ã³ã»ã¹ããã¯ãã³å士ã
ã®ã£ã¬ããã»ã¹ãã¹ã
Lyudmila Likhovidã®ç¿»èš³ã«ãåå ããã ãããããšãããããŸãã