åºæ¬
YUIã®Eric Miragliaãæåã«ããã«ã€ããŠæžããã®ã§ããç¥ãããŠãããã¢ãžã¥ã©ãŒã¢ãããŒãã®ç°¡åãªæŠèŠããå§ããŸãã ã¢ãžã¥ã©ãŒã¢ãããŒãã«æ¢ã«æ £ããŠããå Žåã¯ãé«åºŠãªãã¯ããã¯ã«é²ãã§ãã ããã
å¿åã¯ããŒãžã£ãŒ
ãã®åºæ¬èšèšã¯ããã¹ãŠã®åºç€ã§ãããjavascriptã§æãåªããŠããŸãã ç¡åé¢æ°ãäœæããããã«å®è¡ããŸãã ãã¹ãŠã®å®è¡å¯èœã³ãŒãã¯ã¯ããŒãžã£å ã«ååšããã¢ããªã±ãŒã·ã§ã³å šäœã®ã©ã€ãã¿ã€ã ãéããŠãã©ã€ãã·ãŒãšç¶æ ã®ä¿æãæäŸããŸãã
ïŒ é¢æ° ïŒ ïŒ {
// ...ãã®ã³ã³ããã¹ãå ã§ã®ã¿ãã¹ãŠã®å€æ°ãšé¢æ°
//ã°ããŒãã«å€æ°ã«åŒãç¶ãã¢ã¯ã»ã¹ã§ããŸã
} ïŒ ïŒ ïŒ ;
ç¡åé¢æ°ã®åšãã®ïŒïŒã«æ³šæããŠãã ããã ããã¯èšèªã§å¿ èŠã§ãããšããã®ã¯ãåèªfunctionã§å§ãŸãã¹ããŒãã¡ã³ãã¯åžžã«é¢æ°å®£èšãšããŠè§£éãããããã§ãã ïŒïŒãè¿œå ãããšã代ããã«é¢æ°åŒãäœæãããŸãã
ã°ããŒãã«èŒžå ¥
JavaScriptã¯ãããããããã©ã«ãã°ããŒãã«ããµããŒãããŠããŸãã å€æ°åã«äžèŽãããšãã€ã³ã¿ããªã¿ã¯ãã®ååã®varæŒç®åãæ¢ããŠã³ã³ããã¹ããã§ãŒã³ããã©ããŸãã ããã§ãªãå Žåãå€æ°ã¯ã°ããŒãã«ã§ãããšæ³å®ãããŸãã å²ãåœãŠã§äœ¿çšãããå Žåãã°ããŒãã«ãªãã®ããŸã äœæãããŠããªããã°äœæãããŸãã ã€ãŸããå¿åã¯ããŒãžã£ãŒã§ã°ããŒãã«å€æ°ã䜿çšãŸãã¯äœæããããšã¯éåžžã«ç°¡åã§ãã æ®å¿µãªãããããã¯ã³ãŒãã®ã¡ã³ããã³ã¹ãäžååã«ãªããããïŒäººã ã«ãšã£ãŠïŒãã®ãã¡ã€ã«ã§ã©ã®å€æ°ãã°ããŒãã«ã§ãããã¯æããã§ã¯ãããŸãã
幞ããªããšã«ãå¿åé¢æ°ã¯åçŽãªä»£æ¿æ段ãæäŸããŸãã ã°ããŒãã«ãã©ã¡ãŒã¿ãŒããã©ã¡ãŒã¿ãŒãšããŠå¿åé¢æ°ã«æž¡ãããšã«ãããããããã³ãŒãã«ã€ã³ããŒãããŸããããã¯ãããã©ã«ãã®ã°ããŒãã«ãã©ã¡ãŒã¿ãŒãããæ確ã§é«éã§ãã äŸïŒ
ïŒ é¢æ° ïŒ $ ã YAHOO ïŒ {
//ããã§ãã³ãŒãã¯jQueryå€æ°ïŒ$ãªã©ïŒããã³YAHOOã«ã¢ã¯ã»ã¹ã§ããŸã
} ïŒ jQuery ã YAHOO ïŒ ïŒïŒ ;
ã¢ãžã¥ãŒã«ã®ãšã¯ã¹ããŒã
ã°ããŒãã«ãªãã®ã ãã§ãªãã宣èšãããå ŽåããããŸãã ç¡åé¢æ°ã®æ»ãå€ãä»ããŠãšã¯ã¹ããŒãããããšã«ããããããç°¡åã«è¡ãããšãã§ããŸãã ãã®ããªãã¯ã¯ãåºæ¬çãªã¢ãžã¥ã©ãŒã¢ãããŒããå®äºããŸããå®å šãªäŸã次ã«ç€ºããŸãã
var MODULE = ïŒ function ïŒ ïŒ {
var my = { } ã
privateVariable = 1 ;
é¢æ° privateMethod ïŒ ïŒ {
// ...
}
ç§ã® moduleProperty = 1 ;
ç§ã® moduleMethod = function ïŒ ïŒ {
// ...
} ;
ç§ãè¿ã ;
} ïŒ ïŒ ïŒ ;
MODULE.moduleMethodãšããã¡ãœãããšMODULE.modulePropertyãšããå€æ°ãšãã2ã€ã®ãããªãã¯ã¡ã³ããŒãæã€MODULEãšããã°ããŒãã«ã¢ãžã¥ãŒã«ã宣èšããŠããããšã«æ³šæããŠãã ããã ããã«ãå¿åé¢æ°ã®ã¯ããŒãžã£ã䜿çšããŠå¥ã®å éšç¶æ ãä¿åããããã«ä»¥åã®ã¢ãããŒãã䜿çšããŠã°ããŒãã«å€æ°ãç°¡åã«ã€ã³ããŒãã§ããŸãã
é«åºŠãªã¢ãããŒã
å€ãã®å Žåãäžèšã®ææ³ã§ååã§ããã«ãããããããããããæ¹åããéåžžã«åŒ·åã§æ¡åŒµå¯èœãªèšèšãäœæã§ããŸãã MODULEãšããååã®ã¢ãžã¥ãŒã«ããé çªã«æ€èšããŸãã
è£å
ã¢ãžã¥ãŒã«æ¹åŒã®å¶éã®1ã€ã¯ãã¢ãžã¥ãŒã«å šäœã1ã€ã®ãã¡ã€ã«ã«å«ããå¿ èŠãããããšã§ãã 倧èŠæš¡ãªããã°ã©ã ã§äœæ¥ããããšããã人ãªã誰ã§ããã³ãŒããè€æ°ã®ãã¡ã€ã«ã«åå²ããããšã®éèŠæ§ãç解ããŠããŸãã 幞ããªããšã«ãã¢ãžã¥ãŒã«ãè£å ããããã®ãšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ããããŸãã æåã«ãã¢ãžã¥ãŒã«ãã€ã³ããŒããã次ã«ã¡ã³ããŒãè¿œå ããŠãããšã¯ã¹ããŒãããŸãã MODULEã¢ãžã¥ãŒã«ãå®æããäŸã次ã«ç€ºããŸãã
var MODULE = ïŒ function ïŒ my ïŒ {
ç§ã® anotherMethod = function ïŒ ïŒ {
//ã¡ãœãããè¿œå ...
} ;
ç§ãè¿ã ;
} ïŒã¢ãžã¥ãŒã«ïŒ ïŒ ;
ããã§ããåäžæ§ã®ããã«varã䜿çšããŠããŸãããããã¯å¿ é ã§ã¯ãããŸããã ãã®ã³ãŒããå®è¡ããããšãã¢ãžã¥ãŒã«ã«ã¯MODULE.anotherMethodãšããæ°ãããããªãã¯ã¡ãœãããäœæãããŸãã è£å ãã¡ã€ã«ã«ã¯ãç¬èªã®ç¶æ ãšã€ã³ããŒããããå€æ°ãä¿åãããŸãã
ç¡æå é»
åã®äŸã¯ãäºåã«äœæãããåŸã§è£å ãããã¢ãžã¥ãŒã«ã«äŸåããŠããŸããããå¥ã®æ¹æ³ã§è¡ãããšãã§ããŸãã ããã©ãŒãã³ã¹ãæ¹åããããã«ã§ããæåã®JavaScriptã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ã¯ãªãããéåæã«ããŒãããããšã§ãã ç¡æã®å é»ã䜿çšããŠãä»»æã®é åºã§èªåèªèº«ãããŒããããæè»ãªã¢ãžã¥ãŒã«ã现ããåå²ã§ããŸãã åãã¡ã€ã«ã«ã¯æ¬¡ã®æ§é ãå¿ èŠã§ãã
var MODULE = ïŒ function ïŒ my ïŒ {
//æ©èœãè¿œå ...
ç§ãè¿ã ;
} ïŒã¢ãžã¥ãŒã«|| { } ïŒ ïŒ ;
ãã®ã¹ããŒã ã§ã¯ãvaræŒç®åãåžžã«å¿ èŠã§ãã ãŸã ã€ã³ããŒãããŠããªãå Žåãã€ã³ããŒããããšã¢ãžã¥ãŒã«ãäœæãããããšã«æ³šæããŠãã ããã ããã¯ãLABjsãªã©ã®ãŠãŒãã£ãªãã£ã䜿çšããŠããããã¯ãªãã§ãã¹ãŠã®ãã¡ã€ã«ãã¢ãžã¥ãŒã«ãšäžŠè¡ããŠããŠã³ããŒãã§ããããšãæå³ããŸãã
éãããè£å
ç¡æã®è£å ã¯è¯ãã§ãããå¶éã課ããŸãããã®äž»ãªãã®ã¯ãã¢ãžã¥ãŒã«ã¡ã³ããŒãå®å šã«ãªãŒããŒã©ã€ãã§ããªãããšã§ãã ãŸããåæåã®å®äºäžïŒãã ããå®äºåŸïŒã¯ãä»ã®ãã¡ã€ã«ã®ã¢ãžã¥ãŒã«ã¡ã³ããŒã䜿çšã§ããŸããã éãããè£å ã¯èµ·åé åºãèšå®ããŸãããäžæžããèš±å¯ããŸãã 次ã«ç°¡åãªäŸã瀺ããŸãïŒå€ãã¢ãžã¥ãŒã«ãè£å ããŸãïŒïŒ
var MODULE = ïŒ function ïŒ my ïŒ {
var old_moduleMethod = myã moduleMethod ;
ç§ã® moduleMethod = function ïŒ ïŒ {
//ã¡ãœããããªãŒããŒã©ã€ãããold_moduleMethodãä»ããŠoldã«ã¢ã¯ã»ã¹ããŸã...
} ;
ç§ãè¿ã ;
} ïŒã¢ãžã¥ãŒã«ïŒ ïŒ ;
ããã§ã¯ãMODULE.moduleMethodãåå®çŸ©ããŸããããå¿ èŠã«å¿ããŠãå ã®ã¡ãœãããžã®åç §ãä¿åããŸããã
ã¯ããŒãã³ã°ãšç¶æ¿
var MODULE_TWO = ïŒ function ïŒ old ïŒ {
var my = { } ã
ããŒ;
for ïŒå€ãããŒïŒ {
if ïŒ oldãhasOwnProperty ïŒ key ïŒ ïŒ {
my [ key ] = old [ key ] ;
}
}
var super_moduleMethod = oldã moduleMethod ;
ç§ã® moduleMethod = function ïŒ ïŒ {
//ã¯ããŒã³ã®ã¡ãœããããªãŒããŒã©ã€ãããsuper_moduleMethodãä»ããŠsuperã«ã¢ã¯ã»ã¹ããŸã
} ;
ç§ãè¿ã ;
} ïŒã¢ãžã¥ãŒã«ïŒ ïŒ ;
ãã®ã¢ãããŒãã¯ããããåªé ãããããããŸãããæè»æ§ãç ç²ã«ããŸãã ãªããžã§ã¯ããŸãã¯é¢æ°ã§ããã¡ã³ããŒã¯è€è£œãããã2ã€ã®ååãæã€åäžã®ãªããžã§ã¯ããšããŠååšãç¶ããŸãã äžæ¹ãå€æŽãããšãããäžæ¹ãå€æŽãããŸãã ãªããžã§ã¯ãã®å Žåãããã¯ååž°çãªè€è£œã«ãã£ãŠä¿®æ£ã§ããŸãããé¢æ°ã¯evalãé€ããŠåœ¹ã«ç«ããªãããã§ãã ã©ãããããããç§ã¯å®å šæ§ã®ããã«ãããå«ããŸããã
ã¯ãã¹ãã¡ã€ã«ç¶æ
ã¢ãžã¥ãŒã«ããã¡ã€ã«ã«åå²ããããšã®é倧ãªå¶éã¯ãåã¢ãžã¥ãŒã«ãç¬èªã®ç¶æ ãä¿åããä»ã®ãã¡ã€ã«ã®ç¶æ ã衚瀺ããªãããšã§ãã ãã¹ãŠã®è£å ã«ãããããããç¶æ ãä¿åããç¡æã®è¿œå ã¢ãžã¥ãŒã«ã®äŸã次ã«ç€ºããŸãã
var MODULE = ïŒ function ïŒ my ïŒ {
var _private = my._private = my._private || { } ã
_seal = my._seal = my._seal || é¢æ° ïŒ ïŒ {
my._privateãåé€ããŸãã
my._sealãåé€ããŸãã
my._unsealãåé€ããŸãã
} ã
_unseal = my._unseal = my._unseal || é¢æ° ïŒ ïŒ {
my._private = _private ;
my._seal = _seal ;
my._unseal = _unseal ;
} ;
// _privateã_sealãããã³_unsealãžã®æ°žç¶çãªã¢ã¯ã»ã¹
ç§ãè¿ã ;
} ïŒã¢ãžã¥ãŒã«|| { } ïŒ ïŒ ;
ã©ã®ãã¡ã€ã«ãããŒã«ã«å€æ°_privateã«ã¡ã³ããŒãèšå®ã§ããå€éšããããã«ã¢ã¯ã»ã¹ã§ããŸãã ãã®ã¢ãžã¥ãŒã«ãå®å šã«ããŒãããããšãã¢ããªã±ãŒã·ã§ã³ã¯MODULE.sealïŒïŒãåŒã³åºããŠãå éš_privateãžã®å€éšã¢ã¯ã»ã¹ãé²ããŸãã ã¢ããªã±ãŒã·ã§ã³ã®åç¶æéäžã«ã¢ãžã¥ãŒã«ãè£å ããå Žåãå éšã¡ãœããã®1ã€ã¯ãæ°ãããã¡ã€ã«ãããŒãããåã«_unsealïŒïŒãåŒã³åºããå®è¡åŸã«_sealïŒïŒãåŒã³åºãããšãã§ããŸãã
ä»æ¥ãè·å Žã§ãããèµ·ãããŸãããç§ã¯ãããèŠãããšã¯ãããŸããã§ããã ããã¯éåžžã«æçšãªã¢ãããŒãã§ãããåå¥ã«èª¬æãã䟡å€ããããšæããŸãã
ãµãã¢ãžã¥ãŒã«
ææ°ã®é«åºŠãªã¢ãããŒããæãç°¡åã§ãã ãµãã¢ãžã¥ãŒã«ãäœæããçç±ã¯ãããããããŸãã ããã¯ãéåžžã®ã¢ãžã¥ãŒã«ãäœæããæ¹æ³ã§ãã
ã¢ãžã¥ãŒã« sub = ïŒ function ïŒ ïŒ {
var my = { } ;
// ...
ç§ãè¿ã ;
} ïŒ ïŒ ïŒ ;
ãããã©ãã»ã©æçœã§ãã£ãŠããèšåãã䟡å€ãããããã«æããŸããã ãµãã¢ãžã¥ãŒã«ã«ã¯ãè£å ãç¶æ ä¿åãªã©ãéåžžã®ã¢ãžã¥ãŒã«ã®ãã¹ãŠã®ããããã£ããããŸãã
çµè«
æãé«åºŠãªã¢ãããŒããçµã¿åãããããšãã§ããŸãã è€éãªã¢ããªã±ãŒã·ã§ã³ãäœæãããšãã¯ãå人çã«ç¡æã®è£å ããã©ã€ããŒãã¹ããŒããããã³ãµãã¢ãžã¥ãŒã«ãéžæããŸãã
ããã©ãŒãã³ã¹ã®åé¡ã«ã¯ãŸã£ãã觊ããŸããã§ããããç°¡åã«èšãããšãã§ããŸããã¢ãžã¥ãŒã«æ¹åŒã¯çç£çã§ãã ååã«çž®å°ãããŠãããããèªã¿èŸŒã¿ãé«éåãããŸãã ç¡æã®ãããã¢ããã«ããããã³ããããã³ã°ãã©ã¬ã«ããŒãã䜿çšã§ããããã«ãªããã³ãŒãã®å®è¡é床ãåäžããŸãã åæåæéã¯ä»ã®ã¢ãããŒããããé·ããªãå¯èœæ§ããããŸãããããã ãã®äŸ¡å€ã¯ãããŸãã ã°ããŒãã«å€æ°ãæ£ããã€ã³ããŒããããŠããã°ãå®è¡ããã©ãŒãã³ã¹ãäœäžããããšã¯ãããŸããããŸããããŒã«ã«ã¢ãžã¥ãŒã«ã§ã®å€æ°ãã§ãŒã³ã®åæžã«ããããµãã¢ãžã¥ãŒã«ã§ã¯ããããããã«æ¹åãããŸãã
çµè«ãšããŠããã®èŠªã«ãã£ãŠåçã«ããŒããããïŒå¿ èŠã«å¿ããŠäœæãããïŒãµãã¢ãžã¥ãŒã«ãåãå ¥ããŸãã ç°¡æœã«ããããã«ç¶æ ã®ä¿åãã¹ãããããŸããããè¿œå ã¯ç°¡åã§ãã ãã®ã¢ãããŒãã«ããããµãã¢ãžã¥ãŒã«ãªã©ã䜿çšããŠãè€éãªéå±€ã³ãŒããå®å šã«äžŠè¡ããŠããŒãã§ããŸãã
var UTIL = ïŒ function ïŒ parent ã $ ïŒ {
var my = parentã ajax =芪ã ã¢ã€ãã¯ã¹ || { } ;
ç§ã® get = function ïŒ url ã params ã callback ïŒ {
// OKãã ããç§ã¯å°ãæµ®æ°ããŠããŸã:)
$ãè¿ããŸãã getJSON ïŒ url ã params ã callback ïŒ ;
} ;
//ãªã©...
芪ãè¿ã ;
} ïŒ UTIL || { } ã jQuery ïŒ ïŒ ;
ããªããããã楜ããã ããšãé¡ã£ãŠãããªãã®èããå ±æããŠãã ããã JavaScriptãã¢ãžã¥ãŒã«åœ¢åŒã§èšè¿°ããŠãã ããïŒ