
ç°åžžã«äŸ¿å©ãªjQueryã©ã€ãã©ãªãŒã®èåãªäœæè
ã§ããJohn Rezigã®ããã°ããã®ããã°æçš¿ã
Simpleãã¯ã©ã¹ãInstantiation ãã§ã4幎以äžã粟ç¥çã«æ»ãæãæ¥ãŸããã ãããŠæ»ã£ãŠããŸãã
ãã ããHabrahabr
ã®æ€çŽ¢çµæã«ã¯ãResigããšããåèªããŸã£ãã衚瀺ãããªããããéå»4幎éã«ããã£ãŠãã®äŸ¿å©ãªããã°æçš¿ã翻蚳ããïŒãŸãã¯å°ãªããšãåèªããïŒããšãèª°ãæ°ã«ããã«èããªããã°ãªããŸããã ãRezigã®ããã°æçš¿ãç§ãèªåã®äž»ãªæå³ãæããåã«åèªããããšïŒRezigã«ãã£ãŠææ¡ãããåé¡ã解決ããããã«Rezigã«ãã£ãŠææ¡ãããæ¹æ³ãåºãŸã£ãŠããªãçç±ãèãåºãããšã ãããŠãç§ã¯èšãçŽããŸãã ïŒèªã¿çŽãèªäœã¯ãèªè
ã«äœã远å ããªãã£ããšããŠããèªè
ã«ãšã£ãŠã¯ãã§ã«æçšã§ãã远å ããŸããïŒ
2007幎12æ6æ¥ã«ãRezigã¯javascriptã§ãnewãæäœã䜿çšããŠãªããžã§ã¯ããäœæããå Žåã«äœãèµ·ãããã調ã¹ãŸããïŒã¯ã©ã¹ãæã€èšèªã§ã¯ããã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ããšèšããŸãïŒã
function User(first, last){ this.name = first + " " + last; } var user = new User("John", "Resig");
Rezigã¯ãjavascriptã®åå¿è
ã«ãšã£ãŠã颿°ã³ãŒãå
ã®ãthisãã®åºçŸããªããžã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãæã£ãŠããããšã瀺ããŠããããšã¯æããã§ã¯ãªãããšãæ£ããææããŸããã ïŒèªåã§æ¬åŒ§ãä»ããŸãïŒé¢æ°ãã©ã€ãã©ãªã®è
žå
ã«ããå Žåããã®ç¶æ³ãææžåããå¿
èŠããããŸã-ããã§ãªãå Žåãã©ã€ãã©ãªãŠãŒã¶ãŒã¯åå¿è
ãšããã»ã©å€ãããŸããïŒèª°ãã颿°ã®æ¬äœã§ãœãŒã¹ã³ãŒããèªãããã§ã¯ãããŸãããå€ãã®å Žåãçž®å°ãããèªã¿åãäžèœãªåœ¢åŒã§äœ¿çšãããŸããïŒ
ãããã£ãŠãRezigã¯ãé
ããæ©ãã
誰ãã ã new ããªãã§ã UserïŒïŒ ããåŒã³åºãããšããããã«ãã£ãŠé ã«2ã€ã®äžå¿«ãªåé¡ãäžåºŠã«çãããšæšè«ããŸããã
ãŸãã倿°ã
user ãã¯æªå®çŸ©ã®ãŸãŸã§ãã颿°ã
UserïŒïŒ ãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠæå³ãããŠããŸãããå€ãè¿ããŸããã
第äºã«ãããã«æªãããšã«ããã®ãããªïŒèª€ã£ãŠåŒã³åºãããïŒã³ã³ã¹ãã©ã¯ã¿ãŒå
ãã
ããã«ã¢ã¯ã»ã¹ããããšãããšãå¿
ç¶çã«ã°ããŒãã«åå空éãè©°ãŸããŸããããã¯ãäžåã§ãšããã©ããã®ãªãçµæã«æºã¡ãŠããŸãã John Resigã¯äŸã䜿çšããŠäž¡æ¹ã®åé¡ã瀺ããŸããã
var name = "Resig"; var user = User("John", name);
ããã§ããResigã¯ããã«ææããã³ã³ã¹ãã©ã¯ã¿ãŒã®åŒã³åºãã¯äŸ¿å©ã§ãã ãããã¿ã€ãã®ç¶æ¿ïŒãããã¿ã€ããããªããžã§ã¯ãã®ããããã£ãååŸããïŒãã€ãŸãå®éã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºãããšã¯ãåçŽãªé¢æ°ãåŒã³åºããŠãªããžã§ã¯ããšåãããããã£ããæ§ç¯ããããããã¯ããã«é«éã«åäœãããšããå©ç¹ããããŸãã
Rezigã¯ãäžæ¹ã§ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠæ©èœãïŒã¯ã€ãã¯ãããã¿ã€ãã®ç¶æ¿ãæäŸããïŒã仿¹ã§ã¯
" new "ãªãã§åŒã³åºããããã®å Žåã¯ãªãŸãŒããšããŠæ©èœãããã³ã«é¢æ°ãäœæããã®ãè¯ããšãããããèªç¶ãªçµè«ãåºããŸãããã³ã³ã¹ãã©ã¯ã¿ãšããŠèªåèªèº«ã«ã jQueryãã€ãã£ãã©ã€ãã©ãªã®ç¬èªã®é¢æ°
$ïŒïŒã®äŸã䜿çšããŠãRezigã¯åççã«ç€ºããŠããŸãããŸããã©ã€ãã©ãªãŠãŒã¶ãŒã
ã $ïŒãdivãïŒã®ä»£ããã«
ã new $ïŒãdivãïŒ ããšæžãå¿
èŠããããšäŸ¿å©ã§ããã
ãïŒ ãã¡ããéããŸãã幞ããªããšã«ãResigã¯ç¶ããŸãããããã
ãã¹ãŠã®åé¡ã¯ã颿°æ¬äœã®æ¡ä»¶ä»ã衚èšã䜿çšããç°¡åãªè§£æ±ºçã«åœ¹ç«ã¡ãŸãã
function User(first, last){ if ( this instanceof User ) {
ããã§ã®
instanceofæŒç®åã¯ã
æ°ããæŒç®åã颿°åŒã³åºãã«é¢äžããŠãããã©ãããæ€åºããããã®æãéèŠãªããŒã«ã§ããããã¯ç°¡åãªäŸã§ç°¡åã«è¡šç€ºã§ããŸãã
function test(){ alert( this instanceof test ); } test();
ãã®ãœãªã¥ãŒã·ã§ã³ãèŠã€ããŠããããæ©èœããŠããããšã確èªããŠãããRezigæ°ã¯æ¬¡ã®ããã«è¿°ã¹ãŸãããæ¬¡ã«ããã®ãœãªã¥ãŒã·ã§ã³ããã¯ã©ã¹ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããäžè¬çãªæ¹æ³ã§ã©ããããŸãã ãã®ç®çã®ããã«ãJohn Rezigã¯æ¬¡ã®ç¡æã®ã³ãŒããã¬ã€ã¢ãŠãããŸããã
ãã®ã³ãŒãã䜿çšããåã®äŸã¯ãåã®ã³ã³ã¹ãã©ã¯ã¿ãŒã®æ¬äœããããã¿ã€ãã®ã
init ãã¡ãœããã®æ¬äœã«ãªãããã«æžãçŽãå¿
èŠããããŸãã
var User = makeClass(); User.prototype.init = function(first, last){ this.name = first + " " + last; }; var user = User("John", "Resig"); user.name
ã
makeClass ãJohn Rezigã®äœæ¥ã®è«çãååã«è©³çްã«èª¬æãããŠããŸãã ã
makeClassïŒïŒ ã颿°ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§ã¯ãªããã³ã³ã¹ãã©ã¯ã¿ãŒãäœæããŸã-ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ã
ã makeClass ã ããè¿ã
ããå¿å
颿°ïŒargsïŒé¢æ°ã§ãã ãã¯ã©ã¹ãã®ååïŒçµæãšããŠãã®é¢æ°ã«äžããããååïŒã¯ãŸã ç¥ãããŠããªããããå®è¡æã«ãµãŒãã¹javascriptããããã£ã
arguments.callee ãã«é ŒããããããååãååŸããŸãã å¥ã®ããªãã¯ã¯ããã®å¿å颿°ã
ã new ããªãã§åŒã³åºãããå Žåãã³ã³ã¹ãã©ã¯ã¿ãŒã®åœ¹å²ã§èªåèªèº«ãåŒã³åºããšãã«ãã®åŒæ°
ïŒã arguments ãïŒããã®å
éšã«åæž¡ãããããšã§ã
ïŒã return new arguments.calleeïŒargumentsïŒ ãïŒ -ãããŠããã®åŒæ°ã®ã»ããã
argsãã©ã¡ãŒã¿ãŒã«ãªã
ã initã¡ãœããã«æž¡ã
ããŸã ã
John Rezigã®ææ
®æ·±ãããã°ã®æžãçŽãã¯çµãããŸããã ä»ãç§ã¯åœŒèªèº«
ãããŸãã«ãè³¢ã
ããã«æãããå Žæã«ã€ããŠæçµçã«è©±ãããšãã§ããŸãã
圌ã®
makeClassã¢ã€ãã¢ã®äžå¿«ãªèŠçŽ ã¯
ã arguments.calleeããããã£ã®äœ¿çšã§ã
ã ãã®ããããã£ã¯ããã©ãŠã¶ã®ããã©ãŒãã³ã¹ã®å éã«é¢ããŠåé¡ããããšèããããŠ
ããããïŒ
äœããã®çç±ã§çŸä»£ã®ã€ã³ã¿ããªã¿ã®æé©å
ã§ã¯å¯Ÿå¿ã§ããªãïŒãèšèªã®æ°ããããŒãžã§ã³ïŒECMAScript 5ïŒã§ãã¥ã¢ã³ã¹ã®1ã€ã§ããã峿 Œã¢ãŒãããå°å
¥ãããŸããããã¯ã
ã arguments.callee ãã®å®å
šãªæåŠ
ã§ãã ïŒ2009幎5æããžã§ã³ã»ã¬ãžã°èªèº«ã
ããã«ã€ããŠèšåã ã
Habrahabrã«
ç§»ãããŸãã ãïŒ
ããŸããŸãªjavascriptãã©ã€ãã©ãªã®äœæè
ã®ã³ãã¥ããã£ã«ããã
ã arguments.callee ãã«å¯Ÿãããã®æµæã¯ãæéã®çµéãšãšãã«ãRezigovã®èªå·±åŒã³åºãã³ã³ã¹ãã©ã¯ã¿ãŒèªäœã®ã¢ã€ãã¢ã«äžéšã·ããããŠããããã«æãããŸãã
" And" new $ïŒ "div"ïŒ "ã¯ããã®èããæ¯æãã匷åã§èª¬åŸåã®ããè°è«ã®ããã§ãã
èªå·±åŒã³åºãã³ã³ã¹ãã©ã¯ã¿ãŒã«å¯Ÿããæµæã®ãã1ã€ã®çç±ã¯ã
æãã ã«ãã new ãæŒç®åãJavaScriptèšèªã®éèŠãªéšåã§ãããšããèã
ã§ã ããã®æŒç®åã®ç¡ç¥ã¯éåžžã«æ¥ããããããããã®æŒç®åã®äžåšã«ãã£ãŠåŒãèµ·ãããããšã©ãŒãé²ãå¿
èŠã¯ãããŸããã ïŒã³ã³ãã¥ãŒã¿ãŒç§åŠè
ã®ç¹ã«äŸ¿å©ãªããŒã«ã«ã€ããŠã¯ãåžžã«èªèçãªãã®ããããŸãããã®ææ
ã¯ãå©ããå¿
èŠãšããæ°åè
ã«çãããããªå«æªæãåŒãèµ·ããå ŽåããããŸãããããããããã¯ãããããç°¡åãããŸããç§ã¯ã»ãã¯ã¹ãããŸããã ïŒ
ããã¯äœåºŠãèŠãŸããã
ç§ã¯ããã®ïŒ2011幎ïŒ5æã«
azproductionã«ãã£ãŠã³ã³ãã€ã«ãã
ãJavaScript FAQã§ ãæ¬¡ã®ããã«èšãããããšãèŠããŠ
ããŸã ã
-æ°ãããã®ãéããŠãªããžã§ã¯ããäœæããããšã¯ãããè¯ãããã身è¿ã§ãã€ããªãã®ãŒçã§ãã ãã¶ã€ããŒã¯å€§æåã«ããå¿
èŠããããŸãã
-ç§ã¯èŠçŽã«åºã¥ããŠããããšã奜ã¿ãã³ã³ã¹ãã©ã¯ã¿ãŒå
ã§ããããã§ãã¯ããŸãã-ç§ã¯æ°ããã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããããã£ãŠã°ããŒãã«ã«é£ãã§ããŸã-ããã¯ãæãè
èªèº«ããæå³ããŸãã ãããŠã決ããŠç§ã¯newã§ãšã©ãŒã奚å±ããŸãã-äžéšã®äººã
ã¯ãããã°ããŒãã«ãªãã®ã§ãããã©ããã確èªãããŠãŒã¶ãŒãnewãªãã§ã³ã³ã¹ãã©ã¯ã¿ãåŒã³åºããã³ã³ã¹ãã©ã¯ã¿å
ã«ãªããžã§ã¯ããäœæããŠè¿ããŸã-ããã¯ãšã©ãŒãžã®å¥šå±ã§ãããã€ããªãã®ãŒçã«ééã£ãã¢ãããŒãã§ãã
ïŒåŒçšã®çµãããïŒ
ãŸããå°å³ã衚瀺ããçŸãããªãŒãã¬ããã©ã€ãã©ãªã®äœæè
ã§ãããŠã©ãžããŒã«ã¢ã¬ãã©ã³ãã³ã®äºäŸãèŠããŠããŸãã ãã®ïŒ2011幎ïŒ8æã«ã圌ã¯Githubã§ã®
å䜵ã®ãªã¯ãšã¹ããåãåããŸãããèè
ã¯ãåãã¶ã€ããŒã®åé ã§ãã®ã³ãŒãã®ãããªãã®ã眮ãããšãææ¡ããŸããã
if ( !(this instanceof arguments.callee) ){ return new arguments.callee(arguments); }
ã¢ã¬ãã©ã³ãã³ã¯ããã«çããïŒ
-åå¿è
ã®JSäœæè
ãééããç¯ããªãããã«ããããšã¯éåžžã«äŸ¿å©ã§ããããŠãŒã¶ãŒã«ééã£ãŠããããšãäŒããã®ã§ã¯ãªãã誀ã£ãæ§æãèš±å¯ãããããªéãèšèªã®ã¢ã€ãã¢ã¯å¥œãã§ã¯ãããŸããã
-ãnewãããªããŠããªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã®ã§ã¯ãªããã
new ErrorãïŒãã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒã®åã«æ°ããããŒã¯ãŒãã眮ãã®ãå¿ãããïŒã®ãããªããšãããæ¹ãè¯ãããã«æããŸãã
-ãããŠããã1ã€ãã
ãŸããarguments.calleeã¯çŸåšæªæããããšèŠãªãããŠãããããã¯ã©ã¹åãæç€ºçã«èšè¿°ããæ¹ãå®å
šã§ãã
ïŒåŒçšã®çµãããïŒ
ãªã¯ãšã¹ãã®äœæè
ã¯ãè¡ã£
ãŠarguments.calleeã«ã€ããŠèªã¿ããªã¯ãšã¹ããåãæ¶ããŸããã
arguments.calleeã®æ¬ ç¹ãš
newã®å°éã«ãããåã³èªå·±åŒã³åºãã³ã³ã¹ãã©ã¯ã¿ãŒã®å®è£
ã劚ããããããšãããããŸããã
ã©ã®ãªãŒãã¬ãããŠãŒã¶ãŒãå°ãªããšãã
ã¯ã€ãã¯ã¹ã¿ãŒãã¬ã€ã ããèªããã¯ããã®ã©ã€ãã©ãªã§å®çŸ©ãããŠããã°ããŒãã«ãªããžã§ã¯ããïŒæããã«ãç°¡æœã«ããããã«ïŒ
åã« ã ãªãŒãã¬ãã ãã§ã¯ãªã åã«ã L ããšåŒã°ããããšã«æ°ä»ãã§ãããã 6æåãä¿åãããŸãã ãã ããã³ã³ã¹ãã©ã¯ã¿ãŒã®ååŒã³åºãã®åã«
ã new ããšã¹ããŒã¹ãæžã蟌ãŸãªãããã«ãããã«4æåãä¿åããããšãã§ããŸãã
John Rezigã
arguments.calleeãå®å
šã«æ§ããèªå·±åŒã³åºãã³ã³ã¹ãã©ã¯ã¿ãŒã¬ã³ãŒãã®åãªãè¯ãäŸïŒãã³ãã¬ãŒãããã¿ãŒã³ïŒã«å¶éã
ããŠããã°ãååãã«èããŠãããšæãããšããããŸãã
function User(first, last){ if ( this instanceof User ) {
ãã ãããã¡ããã颿°å
šäœã«äœåãª
if- wrapperãäœæããªãããã«ããã®äŸãåçŽåããå¿
èŠããããŸãã
function User(first, last){ if (!(this instanceof User)) return new User(first, last);
ãããŠã
azproductionã«ãã£ãŠã³ã³ãã€ã«ããã
JavaScript FAQã«æ¬æã衚ããå¿
èŠããããŸãããã®ç°¡ç¥åãããã«ãããŸãã ããã§ã¯ãå§ãã§ããŸããã
ãã®ãããªè¯ãäŸã«åŸãã®ã¯ç°¡åã§æ¥œããã§ãã ãŸããã³ã³ã¹ãã©ã¯ã¿ãŒã³ã³ã¹ãã©ã¯ã¿ãŒãããçè§£ãããããªã£ãŠããŸã-javascriptãªããã£ãã€ã¶ãŒãããæç¢ºã«å«ã¿ãŸãã
人çã§åæ§ã®è¯å®çãªäŸãæåŸã«èŠããå Žåã¯ã
ZIP ZIPã¢ãŒã«ã€ããæäŸããããã±ãŒãžã®
zip.jsã³ãŒããèŠ
ãŠãã ãã-Node.jsã®äžã«çŽç²ãªjavascriptã§æžãããŠã
ãŸã ïŒ
C ++ã® 1
è¡ãªã
;ç§ã¯ç¥ããŸããã§ãããã®ãããªã¯ãã¹ãã©ãããã©ãŒã ã®åäœãããããšïŒïŒ ãŸã£ããåãã³ã³ã¹ãã©ã¯ã¿ãŒã®èªå·±åŒã³åºãã衚瀺ãããŸãã
var Reader = exports.Reader = function (data) { if (!(this instanceof Reader)) return new Reader(data); this._data = data; this._offset = 0; }
çµè«ã¯ç°¡åã§ãããžã§ã³ã»ã¬ãžã°ã®äœåãç ç©¶ãã圌ã®ã¢ããã€ã¹ã«åŸããåœŒã®æç€ºã«åŸã£ãŠè¡åããŠãã ããã ããããè€éãã®ç¹å®ã®å¶éã«ã®ã¿ã
ä»å±ç©ã ããã«ããããããã2012幎7ææ«ãŸã§ã«ããŠã©ãžããŒã«
ã¢ãŽã³ãã©ã³ãã³ ïŒ Mourner ïŒã¯ããªãŒãã¬ããã©ã€ãã©ãªã§
ãæ°ããããªãã¬ãŒã¿ãŒãªãã§ å®è¡ã§ããæ©èœã
å®è£
ããŸãã ã ãããã圌ãçŽåŸãããã®ã¯ç§ã§ã¯ãªã
ã å¿ããããããã©ããã«ã®ãªãŒãã¬ããã®
æ¹è©ãèªåã§æ¹è©ããŠæçš¿ã
ãã®ã¯ãæåŸã«èšã£ãã«éããããŸããã