æè¿ãHabrã®ãªãã£ã¹ã§ãååã«JavaScriptã§ã®ãªããžã§ã¯ãæåãšã¯ã©ã¹ç¶æ¿ã«é¢ããçãã¬ããŒããèªã¿ãããšæããŸããã
äºå®ãç§ã¯ãã€ãŠèªåã®ãªããžã§ã¯ããäœæããç¶æ¿ãã§ãŒã³ãæ§ç¯ããæ¹æ³ãåŠãã ããšãåãã§ãããçºèŠããããšãä»ã®çºèŠã芳å¯ãšå
±æããããšã決ããŸããã ïŒ=
ã»ãããŒã®ããã¹ããæºåããéçšã§ãç§ã¯èªåèªèº«ã®ããã«ããã€ãã®ããšãçºèŠããJavaScriptãèªç±ã«äœ¿ããæ©èœã«é©ããããšããããŠèšèªã詳ããèŠãŠå®éšããããšã«ãã£ãŠã®ã¿éçºè
ãå©çšã§ããããã«ãªãããšãèªããŸãã
ãæ¥é±ã®éææ¥ãŸã§ããã£ãšã»ãããŒãå»¶æããããšããäºå®ãå©çšããŠãç§ã®ç±æãä»ã®èª°ãã«åœ¹ç«ã€ããã«ãç§ã¯ã»ãããŒã®ããã¹ãããããäžã«å
¬éããããšã«ããŸããã
ããã¹ãå
šäœã¯5ã€ã®ã»ã¯ã·ã§ã³ã«åãããŠããŸãã
- Javaã¹ã¯ãªããã®OOPïŒ1/5ïŒïŒãªããžã§ã¯ã
- Javaã¹ã¯ãªããã®OOPïŒ2/5ïŒïŒã¯ã©ã¹
- Javaã¹ã¯ãªããã®OOPïŒ3/5ïŒïŒã¯ã©ã¹ã®ããããã£ãšã¡ãœãã
- Javaã¹ã¯ãªããã®OOPïŒ4/5ïŒïŒã¯ã©ã¹ã®ç¶æ¿
- Javaã¹ã¯ãªããã®OOPïŒ5/5ïŒïŒäŸ¿å©ãªãªã³ã¯
Javaã¹ã¯ãªããã®OOPïŒ1/5ïŒïŒãªããžã§ã¯ã
JavaScriptã®ãã¹ãŠã¯ãå®éã«ã¯ãªããžã§ã¯ãã§ãã é
åã¯ãªããžã§ã¯ãã§ãã 颿°ã¯ãªããžã§ã¯ãã§ãã ãªããžã§ã¯ãã¯ãªããžã§ã¯ãã§ããããŸãã ããã§ã¯ããªããžã§ã¯ããšã¯äœã§ããïŒ ãªããžã§ã¯ãã¯ããããã£ã®ã³ã¬ã¯ã·ã§ã³ã§ãã åããããã£ã¯ååãšå€ã®ãã¢ã§ãã ããããã£åã¯æååã§ãããããããã£å€ã¯æååãæ°å€ãããŒã«å€ããŸãã¯ãªããžã§ã¯ãïŒé
åãšé¢æ°ãå«ãïŒã§ãã
ããçš®ã®å€æ°ãå®çŸ©ãããšããäŸãã°ïŒ
var s = 'hello world'; alert(typeof s);
å®éããªããžã§ã¯ãã®ããããã£ãæé»çã«èšå®ããŸãã ãã®å Žåããã®ãããªãªããžã§ã¯ãã¯ã°ããŒãã«ãŠã£ã³ããŠãªããžã§ã¯ãã«ãªããŸãã
alert (s == window.s);
ããã«ããã®window.sããããã£ã¯ããèªäœããªããžã§ã¯ãã§ãã å®çŸ©æžã¿ã®ããããã£ã®ç¬èªã®ã³ã¬ã¯ã·ã§ã³ãæ¢ã«ãããŸãã
alert(s.length);
ããããã¹ãŠã«ãããäžèŠãããã¯æ®éã®æååãªãã©ã«ã§ãïŒ
ããããã£å€ã颿°ã®å Žåããã®ããããã£ããªããžã§ã¯ãã®ã¡ãœãããšåŒã¶ããšãã§ããŸãã ãªããžã§ã¯ãã®ã¡ãœãããåŒã³åºãã«ã¯ãååã®åŸã«2ã€ã®æ¬åŒ§ïŒïŒã远å ããã ãã§ååã§ãã ãªããžã§ã¯ãã®ã¡ãœãããå®è¡ããããšããã®é¢æ°å
ã®this倿°ã¯ãªããžã§ã¯ãèªäœãåç
§ããŸãã thisããŒã¯ãŒãã䜿çšãããšããªããžã§ã¯ãã¡ãœããã¯ãªããžã§ã¯ãã®ä»ã®ãã¹ãŠã®ããããã£ãšã¡ãœããã«ã¢ã¯ã»ã¹ã§ããŸãã
var s = 'futurico';
ãªããžã§ã¯ãã¯ããªããžã§ã¯ããš
new
ããŒã¯ãŒããåæåããã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã䜿çšããŠäœæãããŸãã ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã¯ãä»ã®ããã°ã©ãã³ã°èšèªã®ã¯ã©ã¹ãšåãæ©èœãæäŸããŸããã€ãŸããã¯ã©ã¹ã®ãªããžã§ã¯ãïŒã€ã³ã¹ã¿ã³ã¹ïŒãäœæããããã³ãã¬ãŒããèšè¿°ããŸãã ãã®ãã³ãã¬ãŒãã¯ããã®ã¯ã©ã¹ã«åºã¥ããŠäœæããããªããžã§ã¯ããææããããããã£ãšã¡ãœããã®åæã«åºã¥ããŠããŸãã JavaScriptã«ã¯ããã¹ãŠã®çµã¿èŸŒã¿ããŒã¿åçšã®çµã¿èŸŒã¿ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ããããŸãã
ããšãã°ãæåå倿°ã宣èšããå ŽåïŒ
var str='karaboz';
çµã¿èŸŒã¿ã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãæé»çã«åŒã³åºããŸãã
var str = new String('karaboz');
ããã«ããã
String
ã¯ã©ã¹ã®ãªããžã§ã¯ãïŒã€ã³ã¹ã¿ã³ã¹ïŒãäœæããŸãã
åãã¹ããŒãã¡ã³ãã¯ãä»ã®ãã¹ãŠã®JavaScriptããŒã¿åã«ãåœãŠã¯ãŸããŸãã
äœæçŽåŸã®ããããã¹ãŠã®ãªããžã§ã¯ãã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ïŒã¯ã©ã¹ïŒã§å®çŸ©ãããŠãããã¹ãŠã®ããããã£ãšã¡ãœãããå®çŸ©ãããŠããŸãã
alert(num.toFixed(1));
å®éãJavaScriptã€ã³ã¿ãŒããªã¿ãŒã¯ãåã®äŸããèŠãããããããªããããå°ãè€éã§ãã ãã®ãããæ¬¡ã®ã³ãŒãã¯2ã€ã®å€æ°ïŒ
String
ã¯ã©ã¹ã®ãªããžã§ã¯ãïŒã®ç䟡æ§ã瀺ããŠããŸããã
var str1 = 'karaboz'; var str2 = new String('karaboz'); alert(str1 == str2);
str1ã®æ°ããã«ã¹ã¿ã ã¡ãœãããå®çŸ©ããããšãããšããšã©ãŒãçºçããŸãã
str1.tell = function(){ alert(this); } str1.tell();
åæã«ãstr2ã§ã¯ãæåŸ
ã©ããã«ãã¹ãŠãæ©èœããŸãã
str2.tell = function(){ alert(this); } str2.tell();
ãã ããæååãæ°å€ãããã³ããŒã«ãªãã©ã«ãä»ããŠäœæããã倿°ïŒãªããžã§ã¯ãïŒã«JavaScriptã«ãã£ãŠèª²ããããã®å¶éã¯ã颿°ãé
åããŸãã¯ãªããžã§ã¯ããªãã©ã«ãä»ããŠäœæããããªããžã§ã¯ãã«ã¯é©çšãããŸããã ã€ãŸã 颿°ãé
åããŸãã¯ãªããžã§ã¯ããå«ã倿°ïŒãªããžã§ã¯ãïŒãã«ã¹ã¿ã ããããã£ãšã¡ãœãããçŽæ¥å²ãåœãŠãããšãã§ããŸãã
var s = 'futurico';
ããã§ã¯ãã°ããŒãã«ãŠã£ã³ããŠãªããžã§ã¯ãã®ã¡ãœãããšããŠäœæããã颿°fèªäœããç¬èªã®ããããã£ãšã¡ãœãããæã€ããšãã§ãããªããžã§ã¯ãã§ããããšãæç¢ºã«ããããŸãã
Javaã¹ã¯ãªããã®OOPïŒ2/5ïŒïŒã¯ã©ã¹
ãããã£ãŠãã¯ã©ã¹ã¯ããã®ã¯ã©ã¹ã«åºã¥ããŠäœæããããªããžã§ã¯ããææããããããã£ãšã¡ãœãããèšè¿°ãããã³ãã¬ãŒãã§ãã JavaScriptã§ç¬èªã®ã¯ã©ã¹ãäœæããã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãäœæããå¿
èŠããããŸãã
ãããŠããã®æ°ããã¯ã©ã¹ã®ãªããžã§ã¯ããäœæããã«ã¯ãnewããŒã¯ãŒãã䜿çšããŠéåžžã®é¢æ°ãšããŠåŒã³åºãå¿
èŠããããŸãã ãã®å Žåãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°å
ã®thisããŒã¯ãŒãã¯ãæ°ããäœæããããªããžã§ã¯ããæãããã«ãªããŸãã
var o = new Class('karaboz'); alert(o);
倿°oã詊ããšãClassïŒïŒé¢æ°ãžã®åŒã³åºããå²ãåœãŠãã ãã§ã-æ°ããããŒã¯ãŒããªãã§ã¯ããªããžã§ã¯ãã¯äœæãããŸããïŒ
var o = Class('karaboz');
颿°ãäœæãããšãJavaScriptã¯ãã®é¢æ°ã«å¯ŸããŠç©ºã®
.prototype
ããããã£ãèªåçã«äœæããŸãã
.prototype
颿°ã®
.prototype
èšè¿°ãããããããã£ãšã¡ãœããã¯ããã®é¢æ°ã«åºã¥ããŠäœæããããªããžã§ã¯ãã®ããããã£ãšã¡ãœãããšããŠå©çšå¯èœã«ãªããŸãã ããã¯ããªããžã§ã¯ããäœæãããã³ãã¬ãŒãïŒã¯ã©ã¹ïŒãèšè¿°ããããã®åºç€ã§ãã
Class.prototype.method = function(){ alert('my name is .method'); }
ããã§ããã®ã¡ãœããããªããžã§ã¯ãèªäœã®ã¡ãœãããšããŠåŒã³åºãããšãã§ããŸãã
o.method();
ãªããžã§ã¯ãã®ããããã£ãåŒã³åºããããšãæåã«ãªããžã§ã¯ãèªäœã§æ€çŽ¢ãããããã«è¡šç€ºãããªãå Žåãã€ã³ã¿ãŒããªã¿ãŒã¯ãªããžã§ã¯ããäœæãã
.prototype
颿°ã®
.prototype
ãŸãã
ãã®ããããªããžã§ã¯ããäœæãããšãããã®ãªããžã§ã¯ããäœæããã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãæã
.constructor
ããããã£ãæ¢ã«ãã®äžã«ååšããŸãã
alert(o.constructor == Class);
ãªããžã§ã¯ãèªäœã«ã¯ãã®ãããªããããã£ãå®çŸ©ããªãã£ãããšã«æ³šæããŠãã ããã ã€ã³ã¿ãŒããªã¿ãŒã¯ããªããžã§ã¯ãå
ã®.constructorããããã£ãæ€åºããããªããžã§ã¯ããäœæããã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®.prototypeããååŸããŸãã ãã§ãã¯ïŒ
alert(Class.prototype.constructor == Class);
.prototype
ã¯ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã«å¯ŸããŠã®ã¿ååšããããã«åºã¥ããŠäœæããããªããžã§ã¯ãã«ã¯ååšããªãããšã«æ³šæããŠ
.prototype
ã
alert(o.prototype);
.prototype
颿°ãžã®ã¢ã¯ã»ã¹ã¯ãã¹ããªã³ã°ãæ°åãªã©ã®JavaScriptã«çµã¿èŸŒãŸãããªããžã§ã¯ããå«ããã¹ãŠã®ãªããžã§ã¯ãã«ååšããŸãã ããã«ãç¬èªã®ããããã£ãšã¡ãœãããäœæããéã®å¶éã¯æ¢ã«ãããŸããïŒããããã£ãšã¡ãœãããæåå倿°ïŒæååãªãã©ã«ãä»ããŠäœæããããªããžã§ã¯ãïŒã«çŽæ¥å²ãåœãŠãããšãããšããããã®å¶éããããŸãïŒã
var s = 'karaboz'; s.constructor.prototype.tell = function(){ alert(this); } s.tell();
ãŸãããããã®ãªããžã§ã¯ãã®çµã¿èŸŒã¿ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã䜿çšããŠãçµã¿èŸŒã¿ã¿ã€ãã®ãªããžã§ã¯ãã«æ°ããããããã£ãŸãã¯ã¡ãœãããçŽæ¥èšå®ããããšãã§ããŸãã
String.prototype.tell = function(){ alert(this); }
ãšããã§ãJavaScriptã®ãã¹ãŠããªããžã§ã¯ãïŒ=
Javaã¹ã¯ãªããã®OOPïŒ3/5ïŒïŒã¯ã©ã¹ã®ããããã£ãšã¡ãœãã
ã¯ã©ã¹ïŒã¯ã©ã¹ã¡ã³ããŒïŒã®ããããã£ãšã¡ãœããã¯ããããªãã¯ïŒãããªãã¯ïŒããã©ã€ããŒãïŒãã©ã€ããŒãïŒãç¹æš©ïŒç¹æš©ïŒãéçïŒéçïŒã®ããããã§ãã
å
¬éã¡ã³ããŒ
Openã¯ããªããžã§ã¯ãèªäœã®å€éšã«ããã³ãŒãã«ãã£ãŠçŽæ¥èªã¿åãã倿Žãåé€ããŸãã¯è¿œå ã§ããããããã£ãšã¡ãœããã§ãã
ãããªãã¯ããããã£ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°å
ã®
.this
ã䜿çšããŠèšå®ãããŸãã
var Class = function(p){ this.p = p; } var o = new Class('karaboz'); alert(op);
ãããªãã¯ã¡ãœããã¯ã
.prototype
颿°ã䜿çšããŠå®çŸ©ã
.prototype
ãŸãã
Class.prototype.method = function(){ alert('my name is .method'); } obj.method();
.method
ã¡ãœããã
obj
ãªããžã§ã¯ãã«å²ãåœãŠã
.method
.prototype
颿°ã®
.prototype
åãååã®ã¡ãœããã倿Žããã
.method
ã¡ãœãããéããã ãã§ããªããžã§ã¯ãã«åãååã®æ°ããããããã£ãäœæããŸãã ã€ãŸã æ°ããäœæããããã¹ãŠã®ãªããžã§ã¯ãã«ã¯ãåŒãç¶ã
.prototype
æšæºã¡ãœããã
.prototype
ãŸãã
ãªããžã§ã¯ãã«
.prototype
ã®ã¡ãœããã
.prototype
衚瀺ãããŠäœ¿çšãããããšãã§ããŸãã ãããè¡ãã«ã¯ãåã«ãªããžã§ã¯ãèªäœã®
.method
ããããã£ãåé€ããŸãã
delete o.method; o.method();
ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®
.prototype
ã§å®çŸ©ãããããããã£ãšã¡ãœããã¯ãæ°ããäœæããããªããžã§ã¯ãã«ã³ããŒãããŸããã ãã®ã¯ã©ã¹ã®ãã¹ãŠã®ãªããžã§ã¯ãã¯ãåãããããã£ãšã¡ãœãããžã®ãªã³ã¯ã䜿çšããŸãã åæã«ãã¯ã©ã¹ã®ãªããžã§ã¯ãïŒã€ã³ã¹ã¿ã³ã¹ïŒãäœæããåŸãå«ããããã°ã©ã ã®ä»»æã®æç¹ã§ãªãŒãã³ã¡ã³ããŒãå®çŸ©ã§ããŸãã
ãã©ã€ããŒãã¡ã³ããŒ
ãã©ã€ããŒãããããã£ãšã¡ãœããã¯ããªããžã§ã¯ãã®å€éšããçŽæ¥ã¢ã¯ã»ã¹ã§ããŸããã ãããã¯ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã§çŽæ¥èšè¿°ããããªããžã§ã¯ããåæåããããšãã«äœæãããŸãã ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã«ãã©ã¡ãŒã¿ãŒãšããŠæž¡ããã倿°ãããŒã¯ãŒãvarã䜿çšããŠå®£èšããã倿°ãããã³ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°å
ã§ããŒã«ã«ãšããŠå®£èšããã颿°ã«ã¯ããã®ãããªããããã£ããããŸãã
var Class = function(p){ var secret = p; var count = 3; var counter = function(){ count â; if(count > 0){ return true; } else { return false; } } }
secret
ã
count
ããã³
counter
ã¡ãœããã¯ããªããžã§ã¯ããåæåããããšãã«ãªããžã§ã¯ãã«äœæãããŸãã ãããã¯ããªããžã§ã¯ãã®å€éšããã®ã³ãŒããŸãã¯ãªããžã§ã¯ãèªäœã®ãããªãã¯ã¡ãœããã«ãã£ãŠã¢ã¯ã»ã¹ã§ããªããããã¯ããŒãºããšåŒã°ããŸãã ãããã®ãã©ã€ããŒãããããã£ã®äœ¿ç𿹿³ãçè§£ããã«ã¯ãç¹æš©ä»ãã¡ãœããã䜿çšããå¿
èŠããããŸãã
ç¹æš©ã¡ãœãã
ç¹æš©ã¡ãœããã¯ãã©ã€ããŒãããããã£ãšã¡ãœããã«ã¢ã¯ã»ã¹ã§ãããªããžã§ã¯ãã®ãããªãã¯ã¡ãœãããšãã®å€éšã®äž¡æ¹ãããå©çšã§ããŸãã ç¹æš©ã¡ãœãããåé€ãŸãã¯æžãæããããšã¯å¯èœã§ããã倿Žããããä¿è·ãããŠããç§å¯ãæããã«ããããã«åŒ·å¶ãããããããšã¯ã§ããŸããã
åªå
ã¡ãœããã¯ãã³ã³ã¹ãã©ã¯ã¿ã§thisããŒã¯ãŒãã䜿çšããŠå®çŸ©ãããŸãã
var Class = function(p){ var secret = p; var count = 3; var counter = function(){ if(count > 0){ count â; return true; } else { return false; } } this.tellSecret = function(){ if(counter()){ return secret; } else { return null; } } } var o = new Class('12345'); alert(o.tellSecret());
.tellSecret
ãæšå¥šãããæ¹æ³ã§ãã æåã®3ã€ã®åŒã³åºãã«å¯ŸããŠãã©ã€ããŒãããããã£
secret
ãè¿ãããã®åŸã®ãã¹ãŠã®éå§ã«å¯ŸããŠ
null
ãè¿ã
null
ã
.tellSecret
ããã©ã€ããŒãã¡ãœãã
counter
åŒã³åºããã³ã«ãããèªäœããªããžã§ã¯ãã®ãã©ã€ããŒãããããã£ã«ã¢ã¯ã»ã¹ããŸãã ã©ã®ã³ãŒãã
.tellSecret
ã¡ãœããã«ã¢ã¯ã»ã¹ã§ããŸãããããã«ãããªããžã§ã¯ãã®ãã©ã€ããŒãã¡ã³ããŒã«çŽæ¥ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
.prototype
ãä»ããŠäœæããããããªãã¯ã¡ãœãããšã¯ç°ãªããäœæãããåãªããžã§ã¯ãã«ç¹æš©ã¡ãœããã®ã³ããŒãäœæãããŸããããã«ãããåœç¶ãããå€ãã®ã¡ã¢ãªãæ¶è²»ãããŸãã ãã©ã€ããŒãããã³ç¹æš©ã¡ã³ããŒã¯ããªããžã§ã¯ããåæåããããšãã«ã®ã¿äœæãããåŸã§å€æŽããããšã¯ã§ããŸããã
éçã¡ã³ããŒ
éçããããã£ãšã¡ãœããã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°èªäœïŒã¯ã©ã¹èªäœïŒã«é¢é£ä»ããããããããã£ãšã¡ãœããã§ãã ãããã£ãŠããããã¯ã¯ã©ã¹ããããã£ããã³ã¡ãœãããšãåŒã°ããŸãã ãããã¯ããªããžã§ã¯ãã®å
åŽãšå€åŽã®äž¡æ¹ã®ã³ãŒãã§äœ¿çšã§ããŸãã
var Class = function(p){ this.p = p; } Class.prototype.tell = function(word){ alert(this.p + ' ' + word + ' ' + this.constructor.p);
éé
JavaScriptã§ã¯ãã¯ããŒãžã£ãšåŒã°ãããã®ã®ãããã§ãéããããç¹æš©ä»ãã®ã¡ãœãããå¯èœã§ãã ã¯ããŒãžã³ã°ã¯ââ颿°ã§ãããããã«å ããŠãããã䜿çšããå
å«ã³ã³ããã¹ãããã®ãã¹ãŠã®åå¥å€æ°ã§ãã
function
æŒç®åã䜿çšãããšãã¯ãåžžã«é¢æ°ã§ã¯ãªãã¯ããŒãžã£ãŒãäœæããŸãã ã¯ããŒãžã£ãŒã¯ã颿°ããããäœæããã³ã³ããã¹ãã®å€éšã§äœ¿çšãããå Žåã§ãããã®ã¯ããŒãžã£ãŒãäœæããã³ã³ããã¹ãã«ååšãããã¹ãŠã®å€æ°ã®å€ããèšæ¶ãããŸãã
var createFunc = function(param){ var closureParam = param;
ããã§ã倿°
f
ãèŠããšãããã¯éåžžã®é¢æ°ã§ããããã®æ¬äœã«ã¯
closureParam
ãã©ã¡ãŒã¿ãããã
f
ãå²ãã³ã³ããã¹ãã®ã©ãã§ãæªå®çŸ©ã§ãããååãšããŠãšã©ãŒãçºçããããšã
closureParam
ãŸãã
alert(f);
ãã ãããšã©ãŒã¯çºçããŸãã
function(){alert(closureParam);}
ã¯ããŒãžã£ãŒå¹æã®ãããã§ããããçæããã³ã³ããã¹ãã®
closureParam
ãèšæ¶ããŸãã
f();
äžèšã®ç¹æš©ã¡ãœãã
.tellSecret
ãæãåºãã°ããã®
.tellSecret
ãçè§£ã§ããŸãã ãã®ã¡ãœããã¯ã
.tellSecret
ãäœæããã³ã³ããã¹ãã§å®£èšããããã©ã€ããŒã颿°
count()
ãšãã©ã€ããŒãããããã£
secret
äž¡æ¹ãèšæ¶ããŸãã åæã«ã
count()
ã
.tellSecret
å
ã§åŒã³åºããããšããã®æåŸã®é¢æ°ã¯ãæ¬äœã§äœ¿çšããã
count()
.tellSecret
èšæ¶ã
count()
ã
Javaã¹ã¯ãªããã®OOPïŒ4/5ïŒïŒã¯ã©ã¹ã®ç¶æ¿
ã¯ã©ã¹ç¶æ¿ã®åºæ¬ååïŒ
- ãµãã¯ã©ã¹ã¯ãåžžã«ã¹ãŒããŒã¯ã©ã¹ã§å®çŸ©ããããã¹ãŠã®ããããã£ãšã¡ãœãããç¶æ¿ããŸãã
- ãµãã¯ã©ã¹ã¯ãç¶æ¿ãããããããã£ãšã¡ãœããããªãŒããŒã©ã€ãããæ°ãããã®ãäœæã§ããŸããããã¯ãåãååã®ã¹ãŒããŒã¯ã©ã¹ã®ããããã£ãšã¡ãœããã«åœ±é¿ãäžããŸããã
- ãµãã¯ã©ã¹ã¯ãã¹ãŒããŒã¯ã©ã¹ã®ãã€ãã£ãã¡ãœããããªãŒããŒã©ã€ãããå Žåã§ãããã€ãã£ãã¡ãœãããåŒã³åºãããšãã§ããå¿
èŠããããŸãã
- ãµãã¯ã©ã¹ãªããžã§ã¯ãã¯ãäœææã«ã®ã¿åæåããå¿
èŠããããŸãã
JavaScriptã«ã¯ãã¯ã©ã·ãã¯ã¯ã©ã¹ã®ç¶æ¿ãäœæããããã®ããŒã«ããããŸããã 代ããã«ããªããžã§ã¯ãã®
.prototype
ããããã£ã«åºã¥ãç¶æ¿ããããŸãïŒãªããžã§ã¯ãã®ã¡ãœãããåŒã³åºããããšãã€ã³ã¿ãŒããªã¿ãŒã¯ãªããžã§ã¯ãèªäœã®ããããã£ã§ãã®ã¡ãœãããæ¢ããããã§ã¡ãœãããèŠã€ãããªãå Žåããã®ãªããžã§ã¯ãã®
.prototype
颿°ã®ããããã£ïŒãªããžã§ã¯ãïŒã§æ€çŽ¢ãç¶ããŸãã
JavaScriptã®ãã®åäœãç¥ã£ãŠã2ã€ã®ã¯ã©ã¹ã®ç¶æ¿ãäœæããŠã¿ãŸãããã
var Class = function(){
ãµãã¯ã©ã¹ãã¹ãŒããŒã¯ã©ã¹ã®
.method
ç¶æ¿ããŠããããšã
.method
ãŸãïŒç¬èªã®
.method
ãšããŠå®è¡ãããŸãïŒã ããã¯ã©ãã§ããïŒ æåã«ãã€ã³ã¿ãŒããªã¿ãŒã¯
objSub
ãªããžã§ã¯ã
objSub
ã§
.method
ã¡ãœãããæ€çŽ¢ããŸã
objSub
ãåœç¶ãããã§ã¯èŠã€ãããŸããã æ¬¡ã«ãã€ã³ã¿ãŒããªã¿ãŒã¯
ClassSub.prototype
ãåŒã³åºãããã®ãªããžã§ã¯ãã®ããããã£ã®äžãã
ClassSub.prototype
ãæ¢ããŸãã ç¹°ãè¿ããŸãããäœãèŠã€ãããŸãã
ClassSub.prototype.method = function(){}
䌌ããã®ã
ClassSub.prototype.method = function(){}
ãèšå®ããŠããŸããã ãã ãã
ClassSub.prototype
ãªããžã§ã¯ã
ClassSub.prototype
ã
Class()
ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ããäœæãããŸãã ãããã£ãŠã
ClassSub.prototype
èªäœã«å¿
èŠãªããããã£ãèŠã€ãããªãå Žåãã€ã³ã¿ãŒããªã¿ãŒã¯ãã®ãªããžã§ã¯ãã®
.prototype
颿°ãåŒã³åºããŸãã ãããŠããã§ã«ããã§åœŒã¯èŠæ±ãããã¡ãœãããèŠã€ããŠããŸãïŒ
Class.prototype.method = function(){}
ã
ãã®é·ãè°è«ãåçŽãªæ¯èŒã§ç¢ºèªããŸãã
ãã®ãããªãããã¿ã€ãã®ãã§ãŒã³ã¯ãä»»æã®é·ãã«ããããšãã§ããŸããããããã«ããŠããã€ã³ã¿ãŒããªã¿ãŒã®æ€çŽ¢ã¯ãçµã¿èŸŒã¿ã®
Object
ã¯ã©ã¹ããïŒæç€ºçãŸãã¯æé»çã«ïŒäœæããããªããžã§ã¯ãã«å°éããæç¹ã§çµäºããŸãã
Object.prototype
ã§èŠæ±ãããã¡ãœããããŸã èŠã€ãããªãå Žåããšã©ãŒãè¿ããŸãã
Object
ã¯ã©ã¹ã¯ãJavaScriptã§äœæãããã¯ã©ã¹ã®å¯èœãªéå±€ã®æäžäœã«ãããŸãã
ããã§ããã®ç¶æ¿ãããã¡ãœãããåå®çŸ©ããåæã«ç¬èªã®è¿œå ã¡ãœããã§ãµãã¯ã©ã¹ãæ¡åŒµããŠã¿ãŸãããã åæã«ãã¹ãŒããŒã¯ã©ã¹ã®ã¡ãœãããåããŸãŸã§ããããšã確èªããŸãïŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããåŸã§ããããªãã¯ã¡ãœãããšããããã£ã远å ã§ããããšã«æ³šæããŠãã ããïŒã
ClassSub.prototype.method = function(){
ããã§ããããŸã§ã®ãšããããã¹ãŠãããŸããã£ãŠããŸãã ãµãã¯ã©ã¹ã§.methodã¡ãœãããåå®çŸ©ãããšããµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ããããå®è¡ãå§ããŸããã åæã«ãã¹ãŒããŒã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã¯åãååã®ä»¥åã®ã¡ãœãããä¿æããŠããŸããã ãµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§æ£åžžã«æ©èœããæ°ãããµãã¯ã©ã¹ã¡ãœãããäœæããŸããã ãã ãããã®æ°ããã¡ãœããã¯ã¹ãŒããŒã¯ã©ã¹ã®ã¡ãœããã«ãªããŸããã§ãã-ã¹ãŒããŒã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãããèªèããããšã©ãŒãã¹ããŒããŸãã
ããçŸå®çãªã³ãŒããæžãããšãããŸã§ã¯ããã¹ãŠãåçŽã«èŠããŸãã ååãšããŠãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã¯ãªããžã§ã¯ãã®ããããã£ãå®çŸ©ããã ãã§ãªããããã€ãã®åæå颿°ãå®è¡ããŸãã ããšãã°ã
Animal
ã¯ã©ã¹ãäœæããŸãããã®ã¯ã©ã¹ã§ã¯ãå人ã®ååããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããããããã®æ°ããã€ã³ã¹ã¿ã³ã¹ãèªçæã«å«ã³ãŸãïŒ=
var Animal = function(name){ this.name = name; this.cry();
ä»åºŠã¯ã€ã³ã¹ã¿ã³ã¹ãå«ã¶ã®ã§ã¯ãªããã£ãŒãšé³ŽãCatã®ãµãã¯ã©ã¹ãäœæããŸã
var Cat = function(name){ this.name = name; this.cry(); } Cat.prototype = new Animal();
ãã®ã³ãŒããå®è¡ãããšã2ã€ã®å«ã³å£°ã¯èãããŸããïŒãã£ãšïŒïŒ ïŒãã£ïŒããã£ïŒããã£ãŒïŒïŒãããŠããã®çç±ãããããŸãã 2çªç®ã®æ²é³Žã¯ãç¶æ¿Cat.prototype = new AnimalïŒïŒãå®è¡ããç¬éã«çºçããŸãã Animalã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãæå³ããã«äœæããŸãïŒãããŠãèªçæã«å«ã³ãŸãïŒã ã€ãŸã ãµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããåã§ããã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãã¢ã€ãã«ç¶æ
ã§å®è¡ããŸãïŒ
ããã«ããµãã¯ã©ã¹ã§ã¯ãã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãå®å
šã«è€è£œããŸããïŒ ãµãã³ã³ã¹ãã©ã¯ã¿ãŒãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®ãã©ã¡ãŒã¿ãŒãä»ããŠæž¡ãããããããã£ããªããžã§ã¯ãã«å²ãåœãŠãããšãããã³ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ç°ãªãæ¹æ³ãå®è¡ãããæ¹æ³ã匷å¶ããããšã¯ãä»ã®æ¹æ³ã§ãããããŸããã
ã¹ãŒããŒã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ãžã®åäžåŒã³åºãã®åé¡ã解決ãã
Animal
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ã2ã€ã®ã¯ã©ã¹ã®ãããã¿ã€ãã®å¹³çãåã«ææããã ãã§ããããïŒ ïŒçµå±ã圌ãããããã¿ã€ããä»ããŠéä¿¡ããã®ã§ãïŒã ãã®è¡ã倿ŽããŠã¿ãŸãããã
Cat.prototype = Animal.prototype;
ã³ãŒããå®è¡ãããšãäºæ³ããã2ã€ã®æ²é³ŽãèãããŸãïŒ ããããåé¡ã¯è§£æ±ºãããããã§ãã
Cat
ãµãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæãããããã«ã
Animal
ã¹ãŒããŒã¯ã©ã¹ã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠã¿ãŸããã
var animal_thing_new = new Animal('juks');
ãã®ã€ã³ã¹ã¿ã³ã¹ã¯ç«çŽã®å£°ã§å«ã³ãŸãïŒ åãååã®èŠªã¯ã©ã¹ã¡ãœãããæžãçŽããããšã倿ããŸããã åé¡ã¯ã
Cat.prototype = Animal.prototype
ãèšè¿°ãããšãåç
§ã«ãã£ãŠAnimal.prototypeãªããžã§ã¯ããCat.prototypeãªããžã§ã¯ãã«æž¡ãããšã§ãïŒãªããžã§ã¯ãã倿°ã«å²ãåœãŠãããŠããå Žåã¯åžžã«ããã§ãïŒã ãããã£ãŠãæåã®å€æŽãäžåœã«è¡ããããšã2çªç®ã®å€æŽãè¡ãããŸãã
ãæžãããšãCat.prototype = new Animal()
ãCat.prototype
æ°ãããªããžã§ã¯ããäœæããŸãããããããã£ã倿ŽããŠã.prototype
ããªããžã§ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°èªäœã®ããããã£ã«ã¯åœ±é¿ããŸããã§ããã芪ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããã«ãå°ãç°ãªãæ¹æ³ã§ç¶æ¿ãå®è£
ããŠã¿ãŸãããã.prototype
ãã¹ãŠã®ããããã£ãšã¡ãœããã.prototype
ã¹ãŒããŒã¯ã©ã¹ãããµãã¯ã©ã¹ã«ã³ããŒããŠã¿ãŸããããåé¡ã®è¡ã次ã®ããã«æžãçŽããŸãã for (var prop in Animal.prototype){ Cat.prototype[prop] = Animal.prototype[prop]; }
, , .. ! ? , , . â . , , ! .
:
.prototype
,
.prototype
, - . :
var Empty = function(){};
Cat.prototype
Empty
. , -
Empty()
.
Cat.prototype
Cat.prototype
-
Animal
.
Cat
,
Cat.prototype
, -
Cat.prototype (== new Empty())
Empty.prototype
,
Animal.prototype
-
:
var Cat = function(name){ Animal.apply(this, arguments); }
ã€ãŸã
Cat
-
Animal
new Cat()
. , , â .
. , ,
.constructor
,
.prototype.constructor
-. , :
Cat.prototype = new Empty()
,
Cat.prototype
.
(new Cat()).constructor
,
Cat.prototype.constructor
,
(new Empty().constructor)
Empty.prototype.constructor ( == Animal.prototype.constructor)
. ã€ãŸã
.constructor
- , ! . , :
var Cat = function(name){ this.constructor.apply(this, arguments); }
, , ..
.constructor
- , . , : , , :
var Empty = function(){};
, , :
Cat.prototype.cry = function(){ Cat.superClass.prototype.cry.apply(this, arguments); alert('one more cat was born'); }
.
.prototype
-
Function
. , , .. .
Java Script (5/5):
- Private Members in JavaScript , Douglas Crockford
- Classical Inheritance in JavaScript , Douglas Crockford
- OOP in JS, Part 1: Public/Private Variables and Methods , Gavin Kistner
- OOP in JS, Part 2: Inheritance , Gavin Kistner
- Inheritance in JavaScript , Kevin Lindsey
- JavaScript, - ,
- JavaScript ,
- JavaScript ,