- ã人éã®é¡ãããOOPããšãããããã¯ã«ã€ããŠè©±ããŸãã
- JavaScriptã§ãããã¿ã€ããçæéã§æã£ãŠåŠçããŠãã ããïŒ
- ãã¯ããŒãžã£ãã¯ã
貎éãªæ¯ç®ã ãã§ãªã...é»æ°ã·ã§ãã¯ã§ãããããšãæãåºããŠãã ããã - javascriptã§ã¿ã€ããŒã¯ã©ã¹ãèšè¿°ããŸããããã¯ãã¢ãã¡ãŒã·ã§ã³ãã€ãã³ããããããæ©èœãå®è¡ããã€ãã³ããã©ã³ããŒã®äžçš®ã§ãã
- 楜ããã§ãã ããïŒ
èŠåïŒ ããªããèšäºãã楜ãããã®ãæåŸ ããŠããªãå Žå...ããªãã¯ééã£ãŠããŸãã ãŠãŒã¢ã¢ã®ã»ã³ã¹ãäœã人ã¯èªã...ããã«ãå§ãïŒ ãããå§ããŸããã...
å·çæç¹ã§ã¯ïŒhello apocalyptic-glamorous 2012ïŒïŒjavascriptã«ã¯å®éã®OOPã¯ãããŸãããããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®åºæ¬ååãå®è£ ããããã®ããªãã¯ããããŸãã ãã®éåžžã«èå³æ·±ããããã¯ãçºèŠããã°ããã®äººã®ããã«ããã®æ¹æ³ã®ç¹ç°æ§ãèªåã®èšèã§èª¬æããŸãã
ããŒã1ã人éã®é¡ãããOOPã
ç°¡åã«èª¬æãããšãOOPã¯ãŸã£ããç¥èãªãã³ãã©ã§ã¯ãããŸããããæ¬è³ªçã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç·šæãã³ãŒãã®æ§é åãã¡ãœããã®éäžåãããã³ãšã³ãã£ãã£ãåäžã®éå±€ãã¡ããªã«çµåããããã®åãªããã¯ããã¯ã§ãã æœæ°ŽèŠãšèªç©ºæ©ã®å»ºé æ¹æ³ãšåæ§ã«ãéççç©ã®æµ®åãšæ®çºæ§ã®çµéšãåãå ¥ããŠãOOPã¢ããªã±ãŒã·ã§ã³ã¯ããã°ã©ã ãšã³ãã£ãã£ã®èªèããçããŠããããªããžã§ã¯ããšããŠäœ¿çšããå®éã®ïŒãªãã©ã€ã³-èŠããŠããŸããïŒïŒäžçããç§ãã¡ã«ç¥ãããŠããç¹æ§ãšç¹æ§ãæ¡çšããŸãã
ã€ãŸããç¬èªã®ããããã£ãšã¡ãœãããæã€ã ãã§ãªããåå«ãçæããŠé²åãããããšãã§ãããšã³ãã£ãã£ãäœæãããŸãïŒ ããã¯ãæ¡åŒµæ©èœãšåŒã°ããŸãã 泚ææ·±ã芪ã®ããã«ããªããžã§ã¯ãã¯ç¶æ¿ã«ãã£ãŠããããã£ã転éããããå¥ã®èŠªãšã³ãã£ãã£ã§ãã芪ã®åå«ã§ããäžä»£ã®çµéšãåãåããŸãã ãããã£ãŠãåäžã®çæããªãŒãäœæãããŸãããã®ããªãŒã§ã¯ãæç¶ãåã®æ¹æ³ã§ããç°çš®ã©ã€ãã©ãªãšã¯ç°ãªããããã²ãŒãããã³å€§é管çã䟿å©ã§ãã
ã芧ã®ãšããããã¹ãŠã人ã ã®ããã§ãïŒ éçºè ã¯ãã®ã·ã¹ãã ã®ç¥ã§ãããäœäžä»£ã«ãããã£ãŠç¶æ¿ãããã«ãŒãèªäœãŸãã¯éçºã®åã ã®ãã©ã³ãã«å€æŽãå ããããšãã§ãããšããéãããããŸãã æŠäºãšçŽäºãæé€ããŸãïŒ æ°ããç¥è-è¿œå ïŒ ãŸãã¯ãã®éãç§ãã¡ã¯ãã¹ãŠãå£ããŸã...ç¥ã«ãªãã®ã¯é£ããã§ãïŒ ãã ããOOPã®ååèªäœã¯ãéçºè ããã£ãã¡ã§ã¯ãªãã«ãŒã«ã«åŸã£ãŠã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã矩åä»ããŠããããããµããŒãã容æã«ããäœç³»åããŸããããã®å Žåã§ãã³ãŒããæ··ä¹±ãããããšãã欲æ±ããŸã£ãã劚ããŸãã... :)
ç§ã®æèŠã§ã¯ãOOPã®éçºãæ¯æŽããã®ã¯ããŸãã«ãã®ãããªã人éãã®ååã®èªèã§ãã äŸãã°ã人çã®ããã«ãåã©ããã¡ãèªåèªèº«ãå¿ èŠã ãšæãããšãã§ããããã«ããå³æ ŒãªèŠªãããŸãïŒ ãããã¯æœè±¡ã¯ã©ã¹-æœè±¡ãšåŒã°ããŸãã 䞡芪ããã¢ãã匟ãããè©©ãåŠã°ãããããããšãèŠããŠããŸããïŒ..ã ãããå€ãã®äž¡èŠªãšåæ§ã«ãæœè±¡ã¯ã©ã¹ã¯åå«ããªããããå¿ èŠãšããã®ãããããŠåœŒããããã©ã®ããã«äœ¿çšããã®ããç¥ããŸãããã圌ãã¯ç¢ºä¿¡ããŠããŸãå¿ èŠã§ãïŒ ã€ãŸã ãã®ãããªã¯ã©ã¹ã«ã¯æœè±¡ã¡ãœãããå«ãŸããŸããæœè±¡ã¡ãœããã¯ããã£ã³ãã£ãŒã®ãªããã£ã³ãã£ãŒã©ãããŒã®ããã«ãå®è£ èªäœã®ãªãã¡ãœããã®å®£èšã§ããããã«ãããåå«ã¯ãã®ã¡ãœãããå®è£ ããå¿ èŠããããŸãã 人çã®ããã«ã䞡芪ã¯ãã°ãã°æºããããŠããªã倢ãåäŸãã¡ã«ç§»ããŸã...
ãã®ãããªåè«ãŸãããªåœ¢ã§ãæœè±¡ã¯ã©ã¹ãšå®¶æé¢ä¿ã®ãããã¯ã«è§ŠããŸãã...ãããã®äž¡æ¹ãç解ããæ¹æ³ãšããŠ....ããããçå£ã«ããã¡ãããããã°ã©ãã³ã°ã«ã¯ã©ã³ãã ãªã¡ãœããããªããã¡ãœãããšããããã£ã¯ããèãæãããã¯ã©ã¹ã®éå±€ã家系å³ã®ããã«ãäžä»£ããäžä»£ãžæ©èœãæ¡åŒµããæ©äŒãæäŸã§ããŸãã ãããŠãæœè±¡ã¯ã©ã¹ãããã«ã¯æœè±¡ã¯ã©ã¹-ã€ã³ã¿ãŒãã§ãŒã¹ïŒã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯å®è£ ããŸã£ããå«ãŸããŠããªãïŒã¯ãããã°ã©ããŒã倱ãããšã®ãªãããã«ãã人çã®ãã¹ãŠã®åå«ã«å¿ èŠãªå ±éã¹ãã«ãå®è£ ããããšãå¿ããªãããã«ããŸãã
ãžã§ãŒã¯ã«å ããŠãå®éã«ã¯ãããšãã°åºå ã®ååãªã©ã®ã¢ããªã±ãŒã·ã§ã³èŠçŽ ãèšèšãããšãããªããžã§ã¯ãè¡šçŸã«ãããå®éã®ãªããžã§ã¯ãã®ããããã£ã«è¿ã¥ããããšãã§ããŸããããã¯ã人çã®ããã«ããã¹ãŠã®å¿ èŠãªå±æ§ãã«ãã»ã«åããŸãïŒã€ãŸããããèªäœã«å«ãŸããŸãïŒïŒäŸ¡æ Œãæ°éãééãè³å³æéããã³ãã®ä»ã®å¿ èŠãªå質ã ãã ããååã¯ç°ãªãå¯èœæ§ããããããã¯ã©ã¹ã¢ãã«ã¯å ±éã®ããããã£ãåå²ããã³éçºãç¶æ¿ããŸãã¯åå®çŸ©ã§ããŸãã
ç¶æ¿ã¯ããããOOPã®æãéèŠãªæ©èœã§ãã æ°ããã©ãŠã³ãã®é²åãå¿ èŠãªå Žåãããã°ã©ããŒã¯èŠªã®ã¹ãã«ãæ¡åŒµããæ°ããã¯ã©ã¹ãäœæããæã«ã¯æ°ããæ¹æ³ã§å®è£ ããŸãã éè€ãã芪ã¡ãœãã-ãªãŒããŒã©ã€ãã çµå±ã®ãšãããåäžä»£ã«ã¯äººçã«ç¬èªã®æŠå¿µããããŸã...ããã°ã©ããåäžä»£ã®ãçµéšãšæŠå¿µããå¿ èŠãšããå Žåã圌ã¯ãããã«ç®ãåããŸãã ãã®æ§é ã§ã¯äœã倱ãããªãããã䜿çšã§ããããšãéåžžã«éèŠã§ãã
ãŸããjavascriptã®å®å šãªOOPä»æ§ã¯ãŸã ãããŸããããOOPã®ååã«åŸãæ©äŒãããããã®äŸ¿å©ãã䜿çšããŸãã ãã¡ããããã®èšäºã®æ çµã¿ã®äžã§ãç解ã®åºæ¬ã ãã«è§ŠããŸããããåç¥ã®ããã«-é¢åãªãã©ãã«ãå§ãŸã£ãã®ã§ãäž»ãªããšã¯ç解ããããšã§ã...
ãããã£ãŠãç§ãã¡ã®ç®æšã¯ãã¿ã€ããŒã«ãã£ãŠå¿ èŠãªããã»ã¹ãéå§ããäœããã®å¶åŸ¡ããããšã³ãã£ãã£ãäœæããããšã§ãã ããããŒãžãã-ããã¯ããã®ãããªãšã³ãã£ãã£ããŸãã¯æ¡ä»¶ä»ãã§ã¯ã©ã¹ã«å«ãŸããããšãæå³ããŸã-ã«ãã»ã«åãã³ã³ãããŒã«ã®ã¡ãœãããããã³å¿ èŠãªããŒã¿ãå«ãããããã£ã 人çã®äŸïŒ
â¢ããããã£-ããã¯ãªããžã§ã¯ããç¥ã£ãŠãããã®ã§ãïŒååãç®ã®è²ãä¹ç®è¡šïŒã
â¢ã¡ãœãã-ããã¯ãªããžã§ã¯ããã§ããããšã§ãïŒã¹ãªãŒããé£ã¹ãã·ã³ã¯ããã¡ãœããã³ãæ§ç¯ããŸãïŒã
éèŠïŒ èªè ããªããžã§ã¯ãã®javascriptã®å 容ããŸã ç¥ããªãå Žåã¯ãäºåã«åèæç®ã§ããã«ã€ããŠèªãããšããå§ãããŸããããããªããšãç解ãå°é£ã«ãªããŸãã
ãªããžã§ã¯ãã®äœæã¯ãæ°ãããã£ã¬ã¯ãã£ãã§åŒã³åºãããé¢æ°ãéããŠè¡ãããŸãã ãã®é¢æ°ããŸã£ããæ®éã®ãã®ã§ã¯ãªããç¹å®ã®ãªããžã§ã¯ããäœæããŠè¿ãç¹å¥ãªé¢æ°-ã³ã³ã¹ãã©ã¯ã¿ãŒã§ãããšå€æããã®ã¯ãæ°ãããã£ã¬ã¯ãã£ãã§ãã 圌女ããããè¿ãåã«ãç§ãã¡ã¯ãã®ãªããžã§ã¯ãã«ãéãæããã¹ãŠã®ãã®ãã€ãŸãç¥èãšã¹ãã«ã®äž¡æ¹ãå²ãåœãŠãããšãã§ããŸãã
function Timer() { /* ⊠*/ }; var timer = new Timer();
ããã§ãTimerã¯ã©ã¹ã®ã¿ã€ããŒãªããžã§ã¯ããäœæããŸããã ããããåµé çãªäººã ãšããŠãç§ãã¡ã¯ãã§ã«ãªããžã§ã¯ããäœæããéã«ããã€ãã®ããããã£ãäžãããããŸãã¯äžããããªããããããŸãã...ããã¯ å¿ èŠã«å¿ããŠãç¥èãšã¹ãã«ããå°ããããšãã§ããããã«æ®éæ§ãå¿ èŠã§ãããäŸãã°ãåŒåžããããšãã§ããªããŠãããªããžã§ã¯ãã¯èŠçã§æ»ã¬ããšã¯ãããŸãã...ç§ãã¡ã¯åç©ã§ã¯ãããŸãããããããè¡ãæ¹æ³ã¯ïŒ
ãããè¡ãããã«ãã¯ã©ã¹ã«æåã«å ¥ããããšã¯ããªããžã§ã¯ããæ¬æ¥åãå ¥ããããã©ã«ãã®ããããã£ã§ãã ãããŠåŠçãŠãããã
function Timer( options ) { //public var defaultOptions = { delay: 20 // , - ,stopFrame: 0 // ,loop: true // ,frameElementPrefixId: 'timer_' // ID , - } for(var option in defaultOptions) this[option] = options && options[option]!==undefined ? options[option] : defaultOptions[option]; /* ⊠*/ };
ãŸããé¢æ°ã·ã°ããã£ã«ã¯ãoptionsãã©ã¡ãŒã¿ãŒããããŸããããã¯ãªããžã§ã¯ãã§ãã ãªããžã§ã¯ããäœã§ãããç¥ã£ãŠããŸããïŒ..ã³ã¡ã³ãã®åŸ
//public
ç掻ã«å¿ èŠãªããããã£ãå«ãdefaultOptionsãªããžã§ã¯ãããããŸãããã®èåŸã«ã¯ããã¹ãŠã®defaultOptionsããããã£ãååã§ãœãŒããããªãã·ã§ã³ãééãããã©ããã確èªããããã§ãªãå Žåã¯defaultOptionsããå€ãèšå®ããã³ãŒããããã¯ã§ãã
ãªããžã§ã¯ãã«å€ãå²ãåœãŠãã«ã¯ãããã䜿çšããŸããããã¯ãé¢æ°å ã§äœæãããçŸåšã®ã³ã³ã¹ãã©ã¯ã¿ãŒãæããŸãïŒæ°ããããšãèŠããŠããŸããïŒïŒã ãããã£ãŠã次ã®ããã«ãªããžã§ã¯ããäœæã§ããŸãã
var timer = new Timer( {delay: 500, loop: false } );
...æå®ãããããããã£ãæžã蟌ãŸããæ¬ èœããŠããããããã£ã¯defaultOptionsããååŸãããŸãã ãªããžã§ã¯ããä¿åãããŸããïŒ æ±çšæ§ãšæè»æ§ãåŸãããŸããïŒ
ã³ã¡ã³ãã«æ³šæããŠãã ãã
//public
ãã¡ãããããã«ã¯æ¡ä»¶å€ããããŸãïŒã¯ã©ã¹ã®æŠå¿µãå«ãjavascriptã®ãã¹ãŠã®OOPèŠåãšåæ§ïŒãããã®æ¬è³ªã¯ãããªãã¯ããããã£ã®ããŒã¯ã«ãããŸãã å€éšããå ¥æã§ããŸãã ãããã®ããããã£ã«ã¯ããªããžã§ã¯ãããçŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã
alert( timer.delay );
人çã®äŸãšããŠããããã¯é ãããå¿ èŠã®ãªããªããžã§ã¯ãã®æãããªç¹æ§ãã€ãŸãç«ã®å°»å°Ÿã®é·ãã§ãã
ãŸããå人ã®ããããã£-ãã©ã€ããŒããããã³ä¿è·-ä¿è·ãããŠããŸãã Personalã«ã¢ã¯ã»ã¹ããã«ã¯ã蚱容ãããå Žåã¯ãããã°ã©ããäœãã©ã®ããã«ã誰ã«è¿åã§ãããã決å®ããç¹å¥ãªæ¹æ³ã䜿çšããå¿ èŠããããŸãã ä¿è·ãããŠãã-ä¿è·ãããŠãããããã¯å°ãå人çã§ã¯ãªãããªããªã ããããã家æãã®èŒªã®äžã§ãã¯ã©ã¹èªäœãšãã®çžç¶äººã®äž¡æ¹ãã¢ã¯ã»ã¹ã§ããŸãã ããã¯ãã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ã®ããã«è¡ãããŸãããã¹ãŠã®ãŽããå°å±ã«èããæ¹ãè¯ããšããããã§ã¯ãªãããã§ã...
ããŒãœãã«ããããã£ãè¿œå ããŸããã-ãã©ã€ããŒããããã¯é¢æ°å ã«å éšå€æ°ãäœæããããšã§è¡ãããããããã®ã¹ã³ãŒãã¯é¢æ°èªäœã«ãã£ãŠå¶éãããŸãïŒãŸãã¯éããããŸãïŒã ã¯ããŒãžã£ã«ã€ããŠèª¬æããŸã...äžæ¹ãTimeré¢æ°ã«ããã«æ¿å ¥ããŸãã
//private var busy = false, // "" " !" currentTime = 0 // ,frame = 1 // ,task = {} // ! ! , ,keyFrames=[] // , .. ; /* ⊠*/
ãã®ãããªããããã£ã«ãå¿ èŠã«å¿ããŠã次ã®ãããªãããªãã¯ã¡ãœãããä»ããã¢ã¯ã»ã¹ãèš±å¯ããŸãã
this.getKeyFrames = function( ) { return keyFrames; }
ãã®ã¡ãœããã¯ãããªãã¯ã§ããããšã«æ³šæããŠãã ããã ããã«ããããªããžã§ã¯ãã®ããããã£ã«å²ãåœãŠããããã€ã³ããä»ããŠã¢ã¯ã»ã¹ã§ããŸãïŒã¢ã¯ã·ã§ã³ãåŒã³åºãå Žåã¯ãæåŸã®è§ãã£ããå¿ããªãã§ãã ããïŒã
timer.getKeyFrames();
ãã©ã€ããŒãã¡ãœãããå¿ èŠãªå Žåããã©ã€ããŒãå€æ°ãšåæ§ã«ãå éšé¢æ°ã®ãéåžžã®ã宣èšã«ãã£ãŠãäœæãããŸãã
function somePrivateMethod() { /* some code... */ }
ãã¶ã€ããŒãå人çãªç®çã§åŒã³åºãããšãã§ãããµãŒãã¹æ©èœãå€æããŸããã ãã ããã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠäœæããããªããžã§ã¯ãããã¯ããã®é¢æ°ã¯äœ¿çšã§ããŸããã 圌ã®è²¡ç£ã§ã¯ãããŸããã
ç¹°ãè¿ããŸãããjavascriptã§ã¯ããããã¯ãã¹ãŠãOOPã®ååã«åŸãã®ã«åœ¹ç«ã€èŠåã§ãããåžžã«æ£ç¢ºãªå®è£ ãæäŸãããšã¯éããŸããã ããšãã°ãjavascriptã§ã®protectedã®å®è£ ã¯éåžžã«ã¿ã€ãã§ãïŒ å®éãprotectedã¯éšåçã«ããªããžã§ã¯ãããã®ã¢ã¯ã»ã¹äžèœã®ããã®privateããããã£ãšãä»ã®ã¯ã©ã¹ããã®ã¢ã¯ã»ã¹ã®ããã®publicã®äž¡æ¹ã®ããããã£ãçµåããŸãã ãŸãã¯ããããªãã¯ã¡ãœãããäœæãããã®ã¡ãœãããåŒã³åºããªããžã§ã¯ããã¡ãœããææè ã®çžç¶äººã§ãããã©ãããªã©ãå éšã§ç¢ºèªã§ããŸãã æ £ç¿ã®æ çµã¿ã®äžã§ãçæ³çãªè§£æ±ºçã¯ãããŸããã
ããŠãã¢ã¯ã»ã¹çµç¹ãå°ãæŽçããŸããã ããã¯OOPã§æãéèŠãªå質ãã€ãŸã䞡芪ã®ã¹ãã«ãšç¥èãæ¡çšããéçºããèœåã§ãããããç¶æ¿ã«ã€ããŠã¯ã©ãã§ããïŒ ãããŠããã§ãjavascriptã®éèŠãªæ©èœã§ãããããã¿ã€ãã®ç¶æ¿ã«ã€ããŠèª¬æããŸãã ãã®ãããã¯ã¯ç解ããã®ã«ãã°ãã°å°é£ãåŒãèµ·ãããŸãããããŠãç§ã¯åçŽãªäººéã®èšèªã§ããã¹ãŠããã£ã±ã説æãããç§ã®è©Šã¿ãããŸãã
ããŒã2. JavaScriptã®ãããã¿ã€ãã
ãã®ãããjavascriptã«ã¯ãããã¿ã€ãã®æŠå¿µããªããžã§ã¯ãã®é ããªã³ã¯[[prototype]]ã__ proto__ãããã³é¢æ°ã®ãããã¿ã€ãããããã£ããããŸãã ãããã®æŠå¿µã®æ··ä¹±ãé¿ããããã«ããããã1ã€ãã€åæããŸãã
- çŸåšã®ãªããžã§ã¯ãã®ãããã¿ã€ãã¯ä»ã®ãªããžã§ã¯ããšåŒã°ããçŸåšã®ãªããžã§ã¯ãã¯ããããæ¬ èœããŠããã¡ãœãããšããããã£ãåŒãåºããŸãã
- é ããªã³ã¯[[prototype]]ã¯çŸåšã®ãªããžã§ã¯ãã®ãããã¿ã€ããæããä»æ§ã§ã¯éçºã«äœ¿çšã§ããŸããã ãã ããä»æ§ã«éåããäžéšã®ãã©ãŠã¶ã§ã¯ã__ proto__ãªããžã§ã¯ãã®ããããã£ãšããŠéãããŠããŸãããçŽæ¥äœ¿çšããæå³ã¯ãããŸããã ãªããªã ã¯ãã¹ãã©ãŠã¶ã§ã¯ãªããæ£ãããããŸããã
- ãããã¿ã€ãã¯é¢æ°ã®æ©èœã§ãïŒ ç¹°ãè¿ããŸãããäœæããããªããžã§ã¯ãã®[[prototype]]ãªã³ã¯ã«å€ãæž¡ãããã«äœ¿çšãããé¢æ°ã§ãã
èªå°å¿ã®ããjavascriptãªããžã§ã¯ãã«ã¯é ããªã³ã¯[[prototype]]ãããã芪ãªããžã§ã¯ãã«é¢é£ä»ãããã芪ãªããžã§ã¯ãã«é¢é£ä»ããããŸãã ãã®ãã§ãŒã³ã®æäžéšã«ã¯ãçµã¿èŸŒã¿javascriptãªããžã§ã¯ããäžçš®ã®æé«ã®åé§äœãtoStringãvalueOfãhasOwnPropertyãªã©ã®å¿ èŠãªãã¹ãŠã®çµã¿èŸŒã¿ã¡ãœãããåãããªããžã§ã¯ãã¢ãã ããããŸãã ãã®ããããã¹ãŠã®åå«ãªããžã§ã¯ãã«ã¯ãæäœéå¿ èŠãªäžé£ã®ã¡ãœããããããé£ããjavascriptç°å¢ã§çãæ®ãããšãã§ããŸãã
thread_object2-[[ãããã¿ã€ã]]-> thread_object1-[[ãããã¿ã€ã]]-> ... {toStringïŒ...ãvalueOfïŒ...ãhasOwnPropertyïŒ...ã...}
ã€ãŸã ã¡ãœãããšããããã£ãæããªã空ã®var obj = {}ãªããžã§ã¯ããäœæããæšæºã¡ãœããã«åãæ¿ãã[[prototype]]ãªã³ã¯ãã§ãŒã³ïŒãã®å Žåãæå°ã®çããã§ãŒã³ïŒã䜿çšããŠãçµã¿èŸŒã¿javascriptãªããžã§ã¯ããããã®ã¡ãœãããååŸããŸãã
var obj = {}; // obj.toString(); // "[object Object]"
ããã¯ããªã³ã¯ã®ãã§ãŒã³[[prototype]]ãä»ããŠãjavascriptã§ãããã¿ã€ãç¶æ¿ãå®è£ ãããæ¹æ³ã§ãã ãããã¿ã€ããã§ãŒã³ãéããŠå©çšã§ãããã¹ãŠã®ããããã£ã¯ãç¥èãšã¹ãã«ã®å庫ã®ããã«åå«ã«éãããå®éã«é²åããã¯ã©ã¹ã®ããªãŒãæ§ç¯ã§ããŸãïŒ
åãªããžã§ã¯ãã®ãããã¿ã€ãããããã£ã¯ãã®äžã«ä¿åãããã®ã§ã¯ãªããçŸåšã®ãªããžã§ã¯ããšçµã¿èŸŒã¿ã®javascriptãªããžã§ã¯ãã®éã®ãããã¿ã€ããã§ãŒã³ã®äžéãªã³ã¯ã«ãæéã®åãã«ãä¿åãããããšã«æ³šæããŠãã ããã ãã®ã«ãŒããªããžã§ã¯ãã«ã¯æ¬æãå¿ èŠã§ããããã®å¹³åãä¹±ãããšã¯ãã¡ããšãããã®ã§ã¯ãããŸããããããã£ãŠãç¬èªã®ãããã¿ã€ãããããã£ãäœæããã«ã¯ããªã³ã¯[[prototype]]ã䜿çšããŠç¬èªã®ãªããžã§ã¯ããäœæããŠãã§ãŒã³ã«åã蟌ãæ¹ãè¯ãã§ããã
ããããèŠããŠããããã«ã[[prototype]]ã¯éãããªã³ã¯ã§ããã©ãããã°ã¢ã¯ã»ã¹ã§ããã«ãã§ãŒã³ãæ§ç¯ã§ããŸããïŒ ããã§ã¯ãæ°ããããŒã¯ãŒããåããæ¢ã«ããç¥ãããŠããConstructoré¢æ°ãšãããèªäœã«å¯ŸããŠéåžžã«ãªãŒãã³ãªprototypeããããã£ã圹ç«ã¡ãŸãã å®éãã³ã³ã¹ãã©ã¯ã¿ãŒãä»ããŠäœæããããªããžã§ã¯ãã¯ããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®prototypeããããã£ã§æå®ãããå€ãæã€[[prototype]]ãªã³ã¯ãååŸããŸãïŒ æåããã¹ãŠã®é¢æ°ã®ãããã¿ã€ãããããã£ã«ã¯ãã»ãšãã©ç©ºã®ãªããžã§ã¯ããžã®åç §ããããŸãïŒé¢æ°èªäœãæãåäžã®ã³ã³ã¹ãã©ã¯ã¿ãŒããããã£ïŒã
function_protection.prototype-> {ã³ã³ã¹ãã©ã¯ã¿ïŒ-> function_profection}
ãããã芪ã¯ã©ã¹ãæž¡ãããšã«ããããããã¿ã€ãããããã£ã眮ãæããããšãã§ããŸãã ã€ãŸã Constructoré¢æ°ãäœæãããšãããããã¿ã€ãããããã£ã§å¿ èŠãªããããã£ãæã€ãªããžã§ã¯ããžã®åç §ãå²ãåœãŠãã ãã§ãäœæããæ°ãããªããžã§ã¯ãã¯ãå¿ èŠãªããããã£ãæã€ãã®ãªããžã§ã¯ããžã®[[prototype]]ãªã³ã¯ãåãåããŸãã
// "" var Foo = function() {}; // prototype Foo.prototype = { hi: 'Hello!', sayHi: function(){ alert( this.hi ) } }; // "" var obj = new Foo(); // , obj.sayHi();
äžèšã®äŸã§ã¯ãobjãªããžã§ã¯ãã®é衚瀺ãªã³ã¯[[prototype]]ããhiããããã£ãšsayHiã¡ãœãããæã€ãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒãåãåããŸããã ãããã£ãŠãobjãªããžã§ã¯ãã¯ãã®ç¥èãšã¹ãã«ãç¶æ¿ããŸãã
ãã®æé ãç°¡çŽ åããããã«ãé¢æ°ãèæ¡ãããŸããã
function extend(Child, Parent) { var F = function() { } F.prototype = Parent.prototype Child.prototype = new F() Child.prototype.constructor = Child Child.superclass = Parent.prototype }
ãã®äœ¿çšäŸãjavascript.ruãåç §
javascript.ru/tutorial/object/inheritance#svoystvo-prototype-i-prototip
åŒæ°ã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãåå«ãããã³èŠªã®2ã€ã®é¢æ°ãå¿ èŠã§ãæ¢ã«èª¬æããããšãå®è¡ããŸãã
- ãããã¿ã€ãã転éããããã®ãŠãŒãã£ãªãã£é¢æ°ãäœæããŸã
- Parenté¢æ°ããã®ãããã¿ã€ãããããã£ã«æžã蟌ã¿ãŸã
- 芪ã®ãããã¿ã€ããžã®ãªã³ã¯[[prototype]]ãæã€äžéãªããžã§ã¯ããæ°ãããã§ãŒã³ãªã³ã¯ãæž¡ããŸã
- ïŒãŠãŒãã£ãªãã£Fã®å ã®ã³ã³ã¹ãã©ã¯ã¿ã®ä»£ããã«ïŒã³ã³ã¹ãã©ã¯ã¿ã«åé¢æ°ãæžã蟌ã¿ãŸã
- åå«ã§ãªãŒããŒã©ã€ããããŠããå Žåããã®ã³ã³ã¹ãã©ã¯ã¿ãŒããã³ä»ã®ãœãŒã¹ã¡ãœãããåç §ã§ããå Žåã«ãã¹ãŒããŒã¯ã©ã¹ããããã£ã§èŠªãžã®åç §ãæžã蟌ã¿ãŸãã
åé¡ãçºçããå¯èœæ§ããããŸãããªãæåã®3è¡ãå¿ èŠãªã®ããæ°ããFïŒïŒãªãã§ä»£å ¥ãããã«Child.prototype = Parent.prototypeã«ããªãã®ãããããŠããã§çµããã§ããïŒïŒ
å®éããã®å²ãåœãŠã§ã¯ãç¶æ¿ãã§ãŒã³ã®æ°ããäžéãªã³ã¯ã¯äœæãããŸããïŒ Parent.prototypeã¯Child.prototypeã«æžã蟌ãŸããParent.prototypeãããã«åç §ããäžéã¹ãã¬ãŒãžãªããžã§ã¯ãã§ã¯ãããŸãããChild.prototypeã«äœããæžã蟌ãããšãããšã芪ã®é åã«å€§ãŸãã«äŸµå ¥ããé·èãžã®æ¬æãšäžä»£ã®ç¶æ¿ã«éåããŸãã æ°ããFïŒïŒã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãããšã§ãåå«ã«æž¡ãããšãã§ãããããã¿ã€ãã®ç¥èãæ ŒçŽããããã®ç¬èªã®é åãChildã«äœæããŸãã
次ã®æ¹æ³ã§ãDesignerã®ãããã¿ã€ãã«åã ã®ããããã£ãè¿œå ã§ããŸãã
Child.prototype.someProperty = "someProperty";
ãšããã§ããããã¿ã€ãããªããžã§ã¯ãã®ããããã£ãã€ãŸãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãšããŠåç §ããããšããªãã§ãã ããã
ãªããžã§ã¯ãã«ã¯ãããã¿ã€ãããããã£ããããŸãããé衚瀺ãªã³ã¯[[prototype]]ããããŸããããããã¿ã€ãããããã£ã«ã¯ãããŸããã
ãã¡ããäœæããããšã¯ã§ããŸãããç¶æ¿ããæå³ã¯ãããŸããã Senseã¯ãäœæããããªããžã§ã¯ãã®[[prototype]]ãªã³ã¯ã«ãã€ã³ã¿ãŒãæž¡ãããšãã§ãããããConstructoré¢æ°ã®prototypeããããã£ããã®ã¿ã§ãã
ãããã¿ã€ãã®ç¶æ¿ã¯ä»¥äžã§ãã æ¬åœã«ç°¡åã§ããïŒ
ãã ããå¯èœãªã®ã¯ãããã¿ã€ãã®ç¶æ¿ã ãã§ã¯ãããŸããã ãŸããã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãæ¹æ³ãã€ãŸã 芪ã¯ã©ã¹ã®å Žåããããã¿ã€ãããããã£ãžã®æžã蟌ã¿ãåŠçããã®ã¯äœã®çç±ã§ããããŸããïŒé¢æ°extendãåç §ïŒã
å¿ããããäŸã®Timerã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ããããä»ããŠããã€ãã®ããããã£ããªããžã§ã¯ãã«å²ãåœãŠãŸãã ãããã®ããããã£ãå°æ¥ã®äžä»£ã«æž¡ãã«ã¯ãåå«ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã§èŠªã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãå¿ èŠããããŸããã€ãŸãã
function TimerPlayer() { TimerPlayer.superclass.constructor.apply( this, arguments ); }
this.superclass.constructor.applyãä»ããŠãã€ãŸãçŸåšã®ã³ã³ã¹ãã©ã¯ã¿ãŒïŒããã§ã¯TimerPlayerïŒã®ååãä»ããŠåŒã³åºãããšã¯ã§ããªãããšã«æ³šæããŠãã ãããããã§ãªãå Žåã芪ã³ã³ã¹ãã©ã¯ã¿ãŒãããã䜿çšããthis.superclass.constructor.applyïŒthisãåŒæ°ïŒãããã¯åå«ãšããŠthisã®ã³ã³ããã¹ãã«é©çšããéããããåŒã³åºãã«å€ããããšã©ãŒãçºçããŸãã
åå«ã®ã³ã³ããã¹ãã§èŠªã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºããšããã¹ãŠã®ããããã£ãšã¡ãœãããäœæãããåå«ã«å²ãåœãŠãããŸãã ããã«ããããä»ããŠã§ã¯ãªãvarãä»ããŠå®£èšããã芪ã®ãã©ã€ããŒãããããã£ã¯ãèªã¿åããèš±å¯ãã芪ã®ãããªãã¯ã¡ãœãããããå Žåã«ã®ã¿ã¢ã¯ã»ã¹ã§ããŸãã
ãã®ããã«ããŠãã¿ã€ããŒãæ§ç¯ãç¶ããŸãã
ããŒã3. Javascriptã¯ã©ã¹Timerãšãã®ã¬ã¬ã·ãŒã
ãã®ããããã§ã«äœããç¥ã£ãŠããã¯ã©ã¹ããããŸãããæ¹æ³ã¯ããããŸããããã®ãããã¹ãã«ãè¿œå ãããšããæ¥ãŸããïŒ ã¯ã©ã¹ã«äœãæãããã§ããïŒ ãã¬ã€ã€ãŒã®ãããªãã®ãäœããŸãããïŒ
â¢éå§
â¢äžæåæ¢
â¢åæ¢
â¢å·»ãæ»ã
â¢setToFrame
ãããŠãããã€ãã®ããã»ã©éèŠã§ã¯ãªãæ¹æ³ã ãã§ã«ããããæžãããšæ³åããŠãã ãã...ããã§ãTimeré¢æ°ã«ããã«æ¿å ¥ããŸãã
this.start = function(){ /* */ if( busy ) return; if( window.console ) console.log ('start: .currentTime='+currentTime+'; frame='+frame); busy = true; timer.call( this ); } this.pause = function() { /* */ if( window.console ) console.log ('pause: currentTime='+currentTime+'; frame='+frame); clearInterval( this.intervalId ); busy = false; } this.stop = function() { /* */ if( window.console ) console.log ('stop: currentTime='+currentTime+'; frame='+frame); clearInterval( this.intervalId ); busy = false; currentTime = 0; frame = 1; this.clearFrameLine(); } /* highlighting - */ this.clearFrameLine = function() { /* */ for(var i=1, str=''; i<this.stopFrame+1; i++) if( elFr = document.getElementById( this.frameElementPrefixId+i ) ) removeClass( elFr, 'active'); } this.setActiveFrameElement = function( frameNumber ){ /* */ if( elFr = document.getElementById( this.frameElementPrefixId+frameNumber ) ) addClass(elFr, 'active'); } this.toString = function() { /* , alert(), */ var str = ''; for(var option in this ) str+= option+': '+( (typeof this[option]=='function') ? 'function' : this[option] )+'\n'; return '{\n'+str+'}'; } this.setTask = function( new_task ) { /* , */ task = new_task; this.stopFrame = 0; keyFrames.length = 0; for(var frInd in task) { if( (+this.stopFrame)< (+frInd) ) this.stopFrame=(+frInd); keyFrames.push( +frInd ); } } this.getKeyFrames = function( ) { /* keyFrames */ return keyFrames; } this.getTask = function() { /* task */ return task; } this.setToFrame = function( toFrame ) { /* */ if(toFrame>this.stopFrame) return; frame=toFrame; currentTime=(frame-1)*this.delay; for(var frInd in task) { if( (+frInd)>(+toFrame) ) break; var taskList = task[ frInd ]; for(var i=0; i<taskList.length; i++ ){ var taskItem; if( taskItem = taskList[i] )taskItem.run(); } } this.clearFrameLine(); this.setActiveFrameElement( toFrame ); } this.rewind = function( amount ) { /* ! ! :))))))))) */ if( amount<0 && this.intervalId ) amount--;/* setInterval */ var toFrame = frame+amount; toFrame = Math.max( Math.min( toFrame, this.stopFrame), 1); this.setToFrame(toFrame); } function timer(){ /* , setInterval */ var this_ = this; /* */ this.intervalId = setInterval( function() { /* setInterval this.delay */ //console.log ('currentTime='+currentTime+'; frame='+frame+';'+task); if( task[ frame ] ) { /* , ... */ var taskList = task[ frame ] /* ... - */ for(var i=0; i<taskList.length; i++ ){ /* - - run... */ var taskItem; if( taskItem = taskList[i] ) taskItem.run(); /* ... */ } } /* highlighting */ this_.setActiveFrameElement( frame ); /* */ currentTime+=this_.delay; /* */ frame++; if( this_.stopFrame && frame>this_.stopFrame ) { /* stopFrame ... */ if( this_.loop ) this_.setToFrame( 1 ); /* - , , , , */ else this_.stop(); /* ! */ } }, this.delay ); }
ãã¹ãŠããã¶ã€ããŒã§çµãããŸããã
äžè¬çã«ãç§ã¯ãã¹ãŠãæ確ã ãšæããŸãïŒããªãã¯éå§æ¹æ³ãå¿ èŠã§ããïŒ ãããªãã¯ã¹ã¿ãŒãã¡ãœãããäœæããŠããŸãïŒ ã©ãã§...
this.start = function(){ if( busy ) return; /* , ! */ /* , */ if( window.console ) console.log ('start: .currentTime='+currentTime+'; frame='+frame); busy = true; /* , */ timer.call( this ); /* */ }
ã¿ã€ããŒæ©èœèªäœã«ã€ããŠè©³ããã³ã¡ã³ãããŸããã å šäœã®ã¢ã€ãã¢ã¯ç°¡åã§ãã
function timer(){ var this_ = this; this.intervalId = setInterval(function() { /* , this_ this! */ }, this.delay ); }
ãŸãããªããžã§ã¯ãã®ã³ã³ããã¹ããžã®ãªã³ã¯ãå€æ°ã«ä¿åããŸãããªããªãã setIntervalã§åŒã³åºãããé¢æ°å ã§ã¯ãã³ã³ããã¹ãã¯å€±ãããå€æ°ã¯ã¯ããŒãžã£ãŒãã€ãŸãããŒã«ã«ã¹ã³ãŒãã«æ®ããŸãã ããããç解ããããã«ãã¯ããŒãžã£ãŒã«ã€ããŠç¹°ãè¿ãïŒãŸãã¯èª¿ã¹ãïŒå¿ èŠããããåŸã§èª¬æããŸã...次ã«ããªããžã§ã¯ãã«intervalIdããããã£ãå²ãåœãŠãŸããããã¯setIntervalã¡ãœããã«ãã£ãŠè¿ãããŸãããã®èå¥åã«ãããäžæåæ¢ãŸãã¯åæ¢æã«setIntervalãåæ¢ã§ããŸãã
ã¿ã¹ã¯ããããã£ã«ã¯å¥ã®åæãå¿ èŠã§ããããã¯ãäœããã®ãã©ãŒã ã§ã¿ã¹ã¯ãå®è¡ããããã«ä¿åããããã§ãã ãã®æ§é ã¯æ¬¡ã®ãšããã§ãã
{ 1:[ { run: function(){} } ], 5:[ {},{},{} /*...*/ ], /*...*/ }
ãªããžã§ã¯ãã¯ãªããžã§ã¯ãã®é åã§ãã ãããèšããªãæ¹ãããã§ãããããªããšæ··ä¹±ããŠããŸããŸã...
ãã ãããã¹ãŠãåçŽã§ããç®çã®ãã¬ãŒã çªå·ã®äžã®ã¿ã¹ã¯ãªããžã§ã¯ãã«ã¯ãrunããããã£ãæã€ã¿ã¹ã¯ãªããžã§ã¯ãã®é åãå«ãŸããŠããŸãã ãã®ããããã£ã«ã¯ãç®çã®ãã¬ãŒã ãåŒã³åºããããšãã«åŒã³åºãããé¢æ°ãå²ãåœãŠãå¿ èŠããããŸãã å¿ èŠã«å¿ããŠãåã¿ã¹ã¯ãªããžã§ã¯ããå¥ã®ããããã£ãè¿œå ããŠããã圌ãšãªããžã§ã¯ããè¿œå ã§ããŸãã
ãŸããå¿ èŠã«å¿ããŠãããã·ã¥ãã·ãã解é€ãã¹ãã©ã€ã¹é åã®æšæºçãªæ¹æ³ã䜿çšããŠãæ°ããã¿ã¹ã¯ãªããžã§ã¯ããé åã«è¿œå ã§ããŸãã
ãã¡ãããã¿ã¹ã¯ãªããžã§ã¯ãèªäœã«ã¯ãç®çã®ãã¬ãŒã ã®çªå·ã«ãã£ãŠããããã£ãå²ãåœãŠãããšãã§ããŸãïŒ
ãããã£ãŠãã¿ã¹ã¯ã«å ¥åããsetTaskã¡ãœããã䜿çšããŠã¯ã©ã¹ãå²ãåœãŠãŠãäœããã€å®è¡ãããã決å®ããŸãã ããã¯ã©ã®ããã«äœ¿çšã§ããŸããïŒ ãµã€ããŸãã¯ãªãã©ã€ã³ã¯ã©ã€ã¢ã³ãã§ããŸããŸãªåçã·ããªãªãå®è¡ããã¢ãã¡ãŒã·ã§ã³ãäœæããæéã«é¢é£ãããã©ã€ãããã¥ãŒããªã¢ã«ãŸãã¯ãã¹ããäœæããéèŠãªã€ãã³ããæãåºãããŸãïŒãããã沞隰ããŸãïŒïŒã ãŸãã¯ãããŒãžã®é ã«æèšã衚瀺ããã ãã§ãïŒ
ããã«ãã¿ã€ããŒãšèŠèŠåãå¶åŸ¡ããããã®äžçš®ã®å°ããªAPIã§ããæãåçŽãªã€ã³ã¿ãŒãã§ã€ã¹ãæ¢ã«æŽçããŠãããä»ã§ã¯ããã䜿çšããŠããã¬ãŒã€ãŒã®ãããªã³ã³ãããŒã«ããã«ãæ§ç¯ããŠããŸãïŒ htmlããŒãžã«ãæ°ã«å ¥ãã®ã³ãŒããæ¿å ¥ããŸãã
<button onclick="timer.rewind(-50);">rewind -50</button> <button onclick="timer.start();">start</button> <button onclick="timer.pause();">pause</button> <button onclick="timer.stop();">stop</button> <button onclick="timer.rewind(+50);">rewind +50</button>
onclickã€ãã³ãã§ã¯ãã¿ã€ããŒãªããžã§ã¯ãã®ã¡ãœããã§ãã¿ã³ããã³ã°ããŸãã ãã¡ãããã©ã®ãªããžã§ã¯ããåŒã³åºãåã«ãäœæããããšãå¿ããªãã§ãã ããã èŠããŠãïŒ -ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã䜿çšïŒ
var timer = new Timer();
ããããä»ã§ã¯ã¹ã¯ãªãããäœæããããšãããã管çããæ¹æ³ããã以å€ã®å Žåãäœã®ããã«æŠã£ãŠããã®ã¯æªããªãã§ãããã
åçŽãªã¢ãã¡ãŒã·ã§ã³ãäœæããŠã¿ãŸããããããŒãžã®åšãã§ç»åã移åããŸãããŸããã¢ãã¡ãŒã·ã§ã³ã®äžçã®äžçš®ã®ããããŒäžçãã§ãã åçã移åããŸã
<img id="ball" src="http://www.smayli.ru/data/smiles/transporta-854.gif" >
ã¿ã€ããŒã®ã¿ã¹ã¯ã¯ãç§ãã¡ã奜ããªã¢ã¯ã·ã§ã³ãããªã¬ãŒããããšã§ããã圌èªèº«ã¯ãã®ã¢ã¯ã·ã§ã³ã«è²¬ä»»ãè² ããŸããã ãããã£ãŠãæ£ç¢ºã«äœããã¹ãããã¿ã¹ã¯ã§ãããIDãšãã®2ã€ã®åº§æšã«ãã£ãŠèŠçŽ èªäœã転éããèŠçŽ ã移åããããã®åçŽãªé¢æ°ãèšè¿°ããããšã§ãããã解決ããŸãã
function moveElem( elem, top, left ){ elem.style.cssText = 'position:relative;top:'+top+'px;left:'+left+'px'; }
ã ãããä»ããã®é¢æ°ã¯ã¿ã¹ã¯ãªããžã§ã¯ãã®å¿ èŠãªãã¬ãŒã ã®æ°ã®äžã®é åã§ã¿ã¹ã¯ãªããžã§ã¯ãã®å®è¡ããããã£ã«å²ãåœãŠãå¿ èŠããããŸããèãã«æ³šæããŠãã ããïŒããã§ãã¹ã¯ãªãããªããžã§ã¯ããäœæãããã®æåã®ãã¬ãŒã ãé åãšããŠå®çŸ©ããŸãããã®ãã¬ãŒã ã«ã¯ããã¯ãã£ãšã¬ã¡ã³ãã®åæäœçœ®ãé 眮ããŸãã
var frames = {}; /* */ frames[1]=[]; frames[1].push( { run: function(){ moveElem( ball, 600, 600 ); } } );
runïŒmoveElemïŒballã600ã600ïŒãæžããªãã®ã¯ãªãã§ããïŒæ§æã...
moveElemïŒïŒ;ã§ãããããããã¯ééã£ãŠããŸãã
...ã¯é¢æ°åŒã³åºããæå³ããŸãããããã§åŒã³åºãå¿ èŠã¯ãããŸããããæ¬äœã«runé¢æ°ããããã£ãé 眮ããå¿ èŠããããŸããããã«ããåŒã³åºããè¡ãããŸãããããªããã°ãmoveElemïŒïŒã®çµæãå®è¡ããŸã-äœãè¿ããªããããæªå®çŸ©ã§ããªãç»åãç¡é§ã«ããã®ã§ããããïŒ
ãããŠåºæ¥äžããïŒæåã®ãã¬ãŒã ã«ãããŒãžã®ç¹å®ã®äœãäœçœ®ã«ç»åïŒãã«ãŒã³ïŒãé 眮ããã¢ã¯ã·ã§ã³ãè¿œå ããŸãããããŠãäžæãéå§ããã«ã¯ããã®ç¶æ ããã¬ãŒã ããšã«å€æŽããå¿ èŠããããŸãã座æšãäžãäžãå·Šã«æžãããŸã-颚ã«åãããŠèª¿æŽããŸãã:)å¿ èŠãªãã¬ãŒã ãåããã«ã¯ãã«ãŒãã䜿çšããŸããå¿ èŠã«å¿ããŠãã¿ã€ããŒã¯ã©ã¹ã®ç¬èªã®ã¡ãœãããèšè¿°ããããšãã§ããŸã-ãã¬ãŒã ãšã¢ã¯ã·ã§ã³ãè¿œå ããã¢ã¯ã·ã§ã³ã®å€æŽãã©ã¡ãŒã¿ãŒããã¬ãŒã ããšã«åæ£ããŸã...äžæ¹ãããšãã°ã2çªç®ãã600çªç®ã®ãµã€ã¯ã«ãŸã§ãã¬ãŒã ãåããŸãã
/* */ for(var i=2; i<601; i++) frames[i] = [ { run: function(i){ return function(){ moveElem( ball, 600-i, 600-i ); } }(i) } ];
ããã§ã¯ãã¯ããŒãžã£ãŒã®äœ¿çšã«ã泚æãæãå¿ èŠããããŸããå®éã«ã¯ãåçiã転éããããã«ãããã§ã¯é©åãªå Žæã§åŒã³åºãããé¢æ°åŒã§ã©ããã³ã°ã䜿çšããŠããŸãã
function(i){ /* i */ }(i) ;
䜿çšããã°ããã®å ŽåïŒ
run: function(){ moveElem( ball, 600-i, 600-i ); }
次ã«ãmoveElemïŒïŒãåŒã³åºããšãã°ããŒãã«ã¹ã³ãŒãããååŸãããŸããforã«ãŒãã§å®£èšããŠå®è¡ãããã®ïŒvar i = 2; i <601; i ++ïŒãã€ãŸã ãã¯ãŒã¯ã¢ãŠããå€æ°iã¯600ã«ãªããŸããããã€ãããã¯iã¯åŒã³åºãããŸããããã€ãããã¯iã¯åŸã ã«å¢å ããé¢éžããŒã«ã®åº§æšãå€æŽããŸãã
ãããã£ãŠãJavaScriptã§CLOSEã䜿çšããŸããããã¯ãã¹ã³ãŒããå®çŸ©ããŸããæ©èœãå®è¡ãããšã
function(i){ /* i */ }(i) ;
...ãã®å éšã§ã¯ãç¬èªã®å€æ°iããã®é¢æ°èªäœã®åŒæ°ãšããŠäœæããããã®å Žã§ã®åŒã³åºãïŒå¿ããå Žåã¯ç¹°ãè¿ãïŒãé¢æ°ã®æ¬äœãå®è¡ããé¢æ°ãæ»ããŸãããããŠãŸãïŒ
ãããªã
return moveElem( ball, 600-i, 600-i );
ã§ã
return function(){ moveElem( ball, 600-i, 600-i ); }
åè ã®å Žåãé¢æ°åŒã³åºãã¯è¿ãããŸããããããã«å®è¡ãããmoveElemïŒballã600-iã600-iïŒã®åŒã³åºãã®çµæãè¿ãããããã§ãïŒ
ãããŠä»ãã¹ã¯ãªããããããŸããããã§ãå²ãåœãŠãŠå®è¡ã§ããŸãã
var timer = new Timer( ); timer.setTask( frames ); timer.start(); /* start */
äžè¬ã«ããã¬ãŒã ããšã®å¶åŸ¡ã¯ãèå³æ·±ãè€éãªã·ããªãªãäœæããããã®åºç¯ãªå¯èœæ§ãæäŸããŸããdenis-or-love.narod.ru/portf/timer
ãã¢ããŒãžã§ã Adobe Flashã®TimeLineã®ãããªã¿ã€ã ã©ãã¹ã©ã€ã³ã®äŸãå®è£ ããŸãã:)-drawFrameLineãã¿ã³ã
ããŒãžäžã®èŠçŽ ã®æ°ãå€ããšãäœçœ®ãåæç»ãããšãã«ãã©ãŠã¶ã®é床ãå€§å¹ ã«äœäžããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
å¿ èŠã«å¿ããŠãæ¡åŒµå¯èœãªæ©èœããã®ä»ã®æ©èœãåããã¹ã¯ãªããäœæçšã®ã€ã³ã¿ãŒãã§ã€ã¹å šäœãäœæã§ããŸããããã§ã圌ããèšãããã«ã誰ããããªã«
倧äºãªã®ã... ãããŠä»ãéºç£ã«è¡ããïŒ
ããŒã¹ã®Timerã¯ã©ã¹ãäœæããããããé«åºŠãªTimerPlayerã¯ã©ã¹ãäœæããŠããããæ¡åŒµããŸããé²æ©ã®äŸãåçŽãªäŸã«å¶éããŸãããã芪ã®ã¹ãã«ãåãå ¥ããåã¯ã©ã¹ã¯ãã¿ã€ããŒã®ãããªã³ã³ãããŒã«ããã«ããã¬ãŒã€ãŒã®ããã«äœæã§ããŸãããããè¡ãã«ã¯ã次ã®3ã€ã®ããšãè¡ããŸãã
- 芪ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºã
- æ°ããã¡ãœãããè¿œå ãã
- æ¡åŒµæ©èœãä»ããŠç¶æ¿ãæž¡ã
// function TimerPlayer( options ) { // TimerPlayer.superclass.constructor.apply(this, arguments); // this.drawPanel = function( panelId, objName ) { var objName = objName || 'timer'; var template ='<button onclick="'+objName+'.rewind(-50);">rewind -50</button>'+ '<button onclick="'+objName+'.start();">start</button>'+ '<button onclick="'+objName+'.pause();">pause</button>'+ '<button onclick="'+objName+'.stop();">stop</button>'+ '<button onclick="'+objName+'.rewind(+50);">rewind +50</button>'; document.getElementById( panelId ).innerHTML = template; } } // extend extend(TimerPlayer, Timer);
ããã«ã¯ãããã¿ã€ãã®ç¶æ¿ã¯ãããŸããããå°æ¥ã®ããã«ãã§ãŒã³ãæ§ç¯ãïŒèŠªã«ãããã¿ã€ãã®ããããã£ãè¿œå ãããå Žåã¯...ïŒãã¹ãŒããŒã¯ã©ã¹ãšã³ã³ã¹ãã©ã¯ã¿ãŒãèšè¿°ããããã«æ¡åŒµããå¿ èŠããããŸããæ°ããdrawPanelã¡ãœããã¯ããã¿ã³ãé 眮ããèŠçŽ ã®idæååãåãå ¥ããŸããæååã¯ãHTMLãã³ãã¬ãŒãã«çœ®æããããªããžã§ã¯ãã®ååã§ãã
// var timerPlayer = new TimerPlayer(); timerPlayer.setTask( frames2 ); timerPlayer.drawPanel( 'controlPanel', 'timerPlayer' );
çµäºããããTimerã¯ã©ã¹ãšãã®åå«ãéå§ããã ãã§ãããã®èšäºãæžãã«ããã£ãŠãæ£è ã®ã¢ããã€ã¹ãšæ¯æŽã«å°å¿µããŠ
ããã ããããšæããŸããåäŒããŠããã°ã©ãã³ã°ã楜ãããŸã§ã