-ãããã¿ã€ãã®ç¶æ¿ã¯çŽ æŽãããJavaScriptã¯ãå€èŠ³ã¯Javaã®ããã«èŠããŸããã
Selfèšèªã«æ ¹ããããªããžã§ã¯ãæåïŒOOïŒèšèªã§ãã ãã®äºå®ã¯ãããã€ãã®çŽ æŽãããæ©èœã®ãããã§èšèªãæ¬åœã«åŒ·åã«ããŸãã
ãããã®æ©èœã®1ã€ã¯ããããã¿ã€ãç¶æ¿ã®å®è£
ã§ãã ãã®ã·ã³ãã«ãªã³ã³ã»ããã¯æè»ã§åŒ·åã§ãã é¢æ°ãé¢æ°åèšèªïŒJavaScriptãå«ãïŒã®æåã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã§ããããã«ãæåã®ã¯ã©ã¹ã®ç¶æ¿ããã³åäœãšã³ãã£ãã£ãäœæã§ããŸãã
幞ããªããšã«ã
ECMAScript 5ã«ã¯å€ãã®ããšãç»å Žããèšèªãæ£ããéã«çœ®ãããšãã§ããŸããïŒãã®äžéšã¯ãã®èšäºã§é瀺ãããŠããŸãïŒã ãŸããJavaScriptãã¶ã€ã³ã®æ¬ é¥ã«ã€ããŠèª¬æããåŸæ¥ã®ãããã¿ã€ãOOã¢ãã«ïŒé·æãšçæãå«ãïŒãšå°ãæ¯èŒããŸãã
ãã®èšäºã§ã¯ãèªè
ãJavaScriptã®åºæ¬ã«ãã§ã«ç²ŸéããŠãããé¢æ°ïŒã¯ããŒãžã£ãŒãšãã¡ãŒã¹ãã¯ã©ã¹é¢æ°ã®æŠå¿µãå«ãïŒãããªããã£ãå€ãæŒç®åãªã©ãç解ããŠããããšãåæãšããŠããŸãã
1.ãªããžã§ã¯ã
JavaScriptã®ãªããžã§ã¯ãã¯ãããŒãšå€ã®ãã¢ã®ã³ã¬ã¯ã·ã§ã³ã«ãããŸããïŒå Žåã«ãã£ãŠã¯ã¡ãã£ãšããå
éšã®éæ³ããããŸãïŒã
ãã ããJavaScriptã«ã¯ã¯ã©ã¹ã®æŠå¿µã¯ãããŸããã ããšãã°ãããããã£
{nameïŒLindaãageïŒ21}ãæã€
ãªããžã§ã¯ãã¯ãã¯ã©ã¹ãŸãã¯ã¯ã©ã¹
Objectã®ã€ã³ã¹ã¿ã³ã¹ã§
ã¯ãããŸããã
Objectãš
Lindaã¯ã©ã¡ããèªèº«ã®ã€ã³ã¹ã¿ã³ã¹ã§ãã 圌ãã¯åœŒãèªèº«ã®è¡åã«ãã£ãŠçŽæ¥æ±ºå®ãããŸãã ãããã®ãªããžã§ã¯ãã«åäœãæ瀺ããã¡ã¿ããŒã¿ã¬ã€ã€ãŒïŒã¯ã©ã¹ãªã©ïŒã¯ãããŸããã
ãã©ãã§ããïŒããšå°ããããšãã§ããŸããç¹ã«ãå€å
žçãªãªããžã§ã¯ãæåèšèªïŒJavaãCïŒãªã©ïŒã®äžçããæ¥ãå Žåã¯ããã§ãã ãããããåãªããžã§ã¯ããïŒå
±éã®ã¯ã©ã¹ããç¶æ¿ããã®ã§ã¯ãªãïŒç¬èªã®åäœãæã€å Žåã100åã®ãªããžã§ã¯ããããå Žåã100åã®ç°ãªãã¡ãœããããããã«å¯Ÿå¿ããŸããïŒ å±éºã§ã¯ãããŸãããïŒ ãããŠãäŸãã°ããªããžã§ã¯ããæ¬åœã«
é
åã§ããããšãã©ããã£ãŠç¥ãã®ã§ããïŒã
ãããã®ãã¹ãŠã®è³ªåã«çããã«ã¯ãåŸæ¥ã®ãªããžã§ã¯ãæåã¢ãããŒããå¿ããŠããŒãããå§ããå¿
èŠããããŸãã ç§ãä¿¡ããŠãããã¯äŸ¡å€ãããã
ãããã¿ã€ãOOã¢ãã«ã¯ãå€ãåé¡ã解決ããããã®ããã€ãã®æ°ããåçã§è¡šçŸåè±ããªæ¹æ³ããããããŸãã ãŸããã³ãŒããæ¡åŒµããã³åå©çšããããã®åŒ·åãªã¢ãã«ãæäŸããŸãïŒããã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ã€ããŠè©±ã人ã
ã«ãšã£ãŠèå³æ·±ããã®ã§ãïŒã ãã ãããã®ã¢ãã«ã§ã¯ä¿èšŒãå°ãªããªããŸãã ããšãã°ããªããžã§ã¯ã
xã«äŸåããŠãåžžã«åãããããã£ã»ãããä¿æããããšã¯ã§ããŸããã
1.1ã ãããŠããªããžã§ã¯ããšã¯äœã§ããïŒ
ãªããžã§ã¯ãã¯ã察å¿ããå€ãæã€äžæã®ããŒã®åçŽãªãã¢ã§ããããšãå
ã«è¿°ã¹ãããŸãã-ãã®ãããªãã¢ã¯ããããã£ãšåŒã°ããŸãã ããšãã°ã幎霢ãååãæ§å¥ãªã©ãå€ãå人ã®ããã€ãã®åŽé¢ïŒãã·ã£ãå¥å
ããã€ã«ãšåŒã³ãŸãããïŒã説æããŸãã

JavaScriptã®ãªããžã§ã¯ãã¯ã
Object.createé¢æ°ã䜿çšããŠäœæãããŸãã ãã®é¢æ°ã¯ã芪ãšãªãã·ã§ã³ã®ããããã£ã»ããããæ°ãããšã³ãã£ãã£ãäœæããŸãã ä»ã®ãšããããã©ã¡ãŒã¿ã«ã€ããŠã¯å¿é
ããŸããã
空ã®ãªããžã§ã¯ãã¯ã芪ãšããããã£ã®ãªããªããžã§ã¯ãã§ãã JavaScriptã§ãã®ãããªãªããžã§ã¯ããäœæããããã®æ§æãèŠãŠã¿ãŸãããã
var mikhail = Object.create(null)
1.2ã ããããã£äœæ
ã€ãŸãããªããžã§ã¯ãã¯ãã§ã«ãããããŸã ããããã£ã¯ãªããšããããšã§ãããã®ç¶æ³ãä¿®æ£ããŠã
ããã€ã«ãªããžã§ã¯ããèšè¿°ããå¿
èŠããããŸãã
JavaScriptããããã£ã¯åçã§ãã ããã¯ããã€ã§ãäœæãŸãã¯åé€ã§ããããšãæå³ããŸãã ããããã£ã¯ããªããžã§ã¯ãå
ã®ããããã£ããŒãæ£ç¢ºã«1ã€ã®å€ã«å¯Ÿå¿ãããšããæå³ã§äžæã§ãã
Object.definePropertyé¢æ°ã䜿çšããŠæ°ããããããã£ãäœæããŸãããã®é¢æ°ã¯ããªããžã§ã¯ããåŒæ°ãšããŠäœ¿çšããäœæããããããã£ã®ååãããã³ããããã£ã®ã»ãã³ãã£ã¯ã¹ã説æãããã³ãã«ã䜿çšããŸãã
Object.defineProperty(mikhail, 'name', { value: 'Mikhail' , writable: true , configurable: true , enumerable: true }) Object.defineProperty(mikhail, 'age', { value: 19 , writable: true , configurable: true , enumerable: true }) Object.defineProperty(mikhail, 'gender', { value: 'Male' , writable: true , configurable: true , enumerable: true })
æå®ãããããŒãæã€ããããã£ã以åã«ååšããªãã£ãå Žåã
Object.definePropertyé¢æ°ã¯æ°ããããããã£ãäœæããŸãïŒããã§ãªããã°ãæ¢åã®ããããã£ã®ã»ãã³ãã£ã¯ã¹ãšå€ãæŽæ°ãããŸãïŒã
ãšããã§ããªããžã§ã¯ãã«è€æ°ã®ããããã£ãè¿œå ããå¿
èŠãããå Žåã¯ã
Object.definePropertiesã䜿çšããããšãã§ããŸãã
Object.defineProperties(mikhail, { name: { value: 'Mikhail' , writable: true , configurable: true , enumerable: true } , age: { value: 19 , writable: true , configurable: true , enumerable: true } , gender: { value: 'Male' , writable: true , configurable: true , enumerable: true }})
æããã«ãäž¡æ¹ã®åŒã³åºãã¯é¡äŒŒããŠãããå®å
šã«æ§æå¯èœã§ãããã³ãŒãã®ãšã³ããŠãŒã¶ãŒåãã§ã¯ãããŸããã ãããã®äžã«æœè±¡åã¬ã€ã€ãŒãäœæããããšããå§ãããŸãã
1.3ã èšè¿°å
ã»ãã³ãã£ã¯ã¹ãå«ãå°ããªãªããžã§ã¯ãã¯èšè¿°åãšåŒã°ããŸãïŒ
Object.definePropertyãåŒã³åºããšãã«äœ¿çšããŸããïŒã èšè¿°åã¯ãããŒã¿èšè¿°åãšã¢ã¯ã»ã¹èšè¿°åã®2ã€ã®ã¿ã€ãã®ããããã§ãã
äž¡æ¹ã®ã¿ã€ãã®èšè¿°åã«ã¯ãèšèªã«ããããããã£ã®èæ
®æ¹æ³ã決å®ãããã©ã°ãå«ãŸããŠããŸãã ãã©ã°ãèšå®ãããŠããªãå Žåããã®ããã©ã«ãå€ã¯
falseã§ã ïŒæ®å¿µãªãããããã¯åžžã«é©åãªããã©ã«ãå€ã§ã¯ãªããããèšè¿°åã®èšè¿°éãå¢å ããŸãïŒã
ããã€ãã®ãã©ã°ãæ€èšããŠãã ããã
- æžã蟌ã¿å¯èœ -ããããã£ã®å€ã¯å€æŽã§ããããŒã¿èšè¿°åã«ã®ã¿äœ¿çšãããŸãã
- æ§æå¯èœ -ããããã£ã®ã¿ã€ããå€æŽããããããããã£ãåé€ãããã§ããŸãã
- enumerable-ããããã£ã¯äžè¬çãªåæã§äœ¿çšãããŸãã
ããŒã¿èšè¿°åã¯ãããããã£ã«ãã€ã³ããããç¹å®ã®ããŒã¿ãèšè¿°ããè¿œå ã®å€ãã©ã¡ãŒã¿ãŒã«å¯Ÿå¿ããç¹å®ã®å€ãå®çŸ©ãããããªãã®ã§ãã - å€ -ããããã£å€
ã¢ã¯ã»ã¹èšè¿°åã¯ãé¢æ°ã®ã²ãã¿ãŒãšã»ãã¿ãŒãä»ããŠç¹å®ã®å€ãžã®ã¢ã¯ã»ã¹ãå®çŸ©ããŸãã èšå®ãããŠããªãå Žåãããã©ã«ãã¯
undefinedã§ãã
- getïŒïŒ -ããããã£ã®å€ã«å¯ŸããŠãªã¯ãšã¹ããè¡ããããšãåŒæ°ãªãã§é¢æ°ãåŒã³åºãããŸãã
- setïŒnew_valueïŒ -é¢æ°ã¯åŒæ°ä»ãã§åŒã³åºãããŸã-ãŠãŒã¶ãŒãè©Šã¿ããšãã®ããããã£ã®æ°ããå€
ããããã£ã®å€ãå€æŽããŸãã
1.4ã ç°¡æœããç®æããŠ
幞ããªããšã«ãããããã£èšè¿°åã¯JavaScriptã§ããããã£ãæäœããå¯äžã®æ¹æ³ã§ã¯ãããŸãã-ããç°¡æœã«äœæã§ããŸãã
JavaScriptã¯ãæ¬åŒ§ãšåŒã°ãããã®ã䜿çšããŠããããã£åç
§ãç解ããŸãã åºæ¬çãªã«ãŒã«ã¯æ¬¡ã®ããã«æžãããŠããŸãã
<bracket-access> ::= <identifier> "[" <expression> "]"
ããã§
identifierã¯ãå€ãèšå®ããããããã£ãå«ããªããžã§ã¯ããæ ŒçŽããå€æ°ã§ããã
expressionã¯ããããã£ã®ååãå®çŸ©ããæå¹ãªJavaScriptåŒã§ãã ããããã£ãæã€ããšãã§ããååã«å¶éã¯ãããŸãã;ãã¹ãŠãèš±å¯ãããŠããŸãã
ãããã£ãŠãåã®äŸãæžãæããããšãã§ããŸãã
mikhail['name'] = 'Mikhail' mikhail['age'] = 19 mikhail['gender'] = 'Male'
泚ïŒãã¹ãŠã®ããããã£åã¯æçµçã«æååã«å€æãããŸãã ãšã³ããª
object [1] ã
object [[1]] ã
object ['1']ããã³
object [variable] ïŒ
variableã®å€ã¯1ïŒã¯åçã§ãã
ãã€ã³ããã£ããã£ãšåŒã°ããããããã£ã«ã¢ã¯ã»ã¹ããå¥ã®æ¹æ³ããããŸãã ãã©ã±ããã®ä»£æ¿ãããã·ã³ãã«ã§ç°¡æœã«èŠããŸãã ãã ãããã®ã¡ãœããã§ã¯ãããããã£ã®ååã¯
æå¹ãªJavaScriptèå¥åã®ã«ãŒã«ã«æºæ ããå¿
èŠããããåŒã§è¡šãããšã¯ã§ããŸããïŒã€ãŸããå€æ°ã¯äœ¿çšã§ããŸããïŒã
ã¹ãããèšé²ã®äžè¬çãªã«ãŒã«ïŒ
<dot-access> ::= <identifier> "." <identifier-name>
ãããã£ãŠãåã®äŸã¯ããã«çŸãããªããŸããã
mikhail.name = 'Mikhail' mikhail.age = 19 mikhail.gender = 'Male'
äž¡æ¹ã®æ§æãªãã·ã§ã³ã¯ãã»ãã³ãã£ãã¯ãã©ã°ã
trueã«èšå®ããŠãããããã£ãäœæããåçã®ããã»ã¹ãå®è¡ã
ãŸã ã
1.5ã ããããã£ãžã®ã¢ã¯ã»ã¹
ç¹å®ã®ããããã£ã«æ ŒçŽãããå€ãååŸããã®ã¯éåžžã«ç°¡åã§ã-æ§æã¯ãããããã£ãäœæããã®ã«éåžžã«äŒŒãŠããŸãããå²ãåœãŠããªããšããå¯äžã®éãããããŸãã
ããšãã°ãããŒã·ã£ã®å¹Žéœ¢ãç¥ãããå Žåã¯ã次ã®ããã«èšè¿°ããŸãã
mikhail['age']
ãããããªããžã§ã¯ãã«ååšããªãããããã£ã®å€ãååŸããããšãããšã
æªå®çŸ©ã«ãªããŸãïŒ
mikhail['address']
1.6ã ããããã£ã®åé€
ãªããžã§ã¯ãããããããã£ãåé€ããããã«ãJavaSCriptã«ã¯
åé€æŒç®åãçšæãããŠããŸãã ããšãã°ã
mikhailãªããžã§ã¯ããã
genderããããã£ãåé€ããå ŽåïŒ
delete mikhail['gender']
åé€æŒç®åã¯ãããããã£ãåé€ãããå Žåã¯
trueãè¿ãã
ããã§ãªãå Žåã¯
falseãè¿ã
ãŸã ã ãã®æŒç®åã®ä»çµã¿ã«ã€ããŠã¯è©³ãã説æããŸããã ãããããŸã èå³ãããå Žåã¯ã
åé€ã®ä»çµã¿ã«é¢ããæãåªããèšäºãèªãããšãã§ããŸãã
1.6ã ã²ãã¿ãŒãšã»ãã¿ãŒ
ã²ãã¿ãŒãšã»ãã¿ãŒã¯ãã«ãã»ã«åãæäŸããããã«å€å
žçãªãªããžã§ã¯ãæåèšèªã§äžè¬çã«äœ¿çšãããŸãã JavaScriptã§ã¯ç¹ã«å¿
èŠãããŸããããåçèšèªãããããã
ãã®æ©èœã«ã¯å察ã§ã ã
ãã ãããããã芳ç¹ãããããããã£ã®èªã¿åãããã³æžã蟌ã¿èŠæ±ã®ãããã·ãæäŸããŸãã ããšãã°ãå§ãšåã«å¥ã
ã®ã¹ãããããããŸããããããããèªãã§ã€ã³ã¹ããŒã«ãã䟿å©ãªæ¹æ³ãå¿
èŠã§ãã
æåã«ãé©åãªããããã£ãèšè¿°ããŠãå人ã®ååãšå§ãäœæããŸãã
Object.defineProperty(mikhail, 'first_name', { value: 'Mikhail' , writable: true }) Object.defineProperty(mikhail, 'last_name', { value: 'WeiÃ' , writable: true })
次ã«ãäžåºŠã«2ã€ã®ããããã£ãäžåºŠã«ååŸããã³èšå®ããäžè¬çãªæ¹æ³ã«ã€ããŠèª¬æããŸãããŠããªã³
åãåŒã³åºããŸãããã
ããŠãå人ã®
nameããããã£ã®å€ãèŠã€ããããšãããã³ã«ãget_full_nameé¢æ°ãå®éã«
åŒã³åºãããŸãïŒ
mikhail.name
察å¿ããããããã£ã«ã¢ã¯ã»ã¹ãã
ããšã§ãªããžã§ã¯ãã®
ååãèšå®ããããšãã§ããŸãããå®éã«
set_full_nameãåŒã³åºããšããã¹ãŠã®æ±ããäœæ¥ãè¡ãããŸãã
mikhail.name = 'Michael White' mikhail.name
ããããã®ãæ¬åœã«äŸ¿å©ãªã·ããªãªããããŸããããã®ãããªã¡ã«ããºã ã®åäœã¯
éåžžã«é
ãããšãèŠããŠãã䟡å€ããããŸãã
ããã«ãã²ãã¿ãŒãšã»ãã¿ãŒã¯éåžžãã«ãã»ã«åã®ããã«ä»ã®èšèªã§äœ¿çšãããECMAScript 5ã§ã¯ãããå®è¡ã§ããªãããšã«çæããŠãã ããããã¹ãŠã®ãªããžã§ã¯ãããããã£ã¯ãããªãã¯ã§ãã
1.8ã ç©ä»¶ãªã¹ã
ããããã£ã¯åçã§ãããšããäºå®ã«ãããJavaScriptã¯ãªããžã§ã¯ãã®ããããã£ã®ã»ããããã§ãã¯ããæ©èœãæäŸããŸãã èå³ã®ããããããã£ã®çš®é¡ã«å¿ããŠããªããžã§ã¯ãã®ãã¹ãŠã®ããããã£ããªã¹ããã2ã€ã®æ¹æ³ããããŸãã
æåã®æ¹æ³ã¯
Object.getOwnPropertyNamesé¢æ°ãåŒã³åºãããš
ã§ãããã®é¢æ°ã¯ããã®ãªããžã§ã¯ãã«èšå®ããããã¹ãŠã®ããããã£ã®ååãå«ã
é
åãè¿ããŸãããããã®ããããã£ã
ç¬èªã®ãã®ãšåŒã³ãŸãã ããšãã°ãMishaã«ã€ããŠç¥ã£ãŠããããšãèŠãŠã¿ãŸãããã
Object.getOwnPropertyNames(mikhail)
2çªç®ã®æ¹æ³ã¯ã
åæå¯èœãªãã©ã°ã§ããŒã¯ãããç¬èªã®ããããã£ã®ãªã¹ããè¿ã
Object.keysã䜿çšããããš
ã§ã ã
Object.keys(mikhail)
1.9ã ãªãã©ã«
ãªããžã§ã¯ããäœæããç°¡åãªæ¹æ³ã¯ããªãã©ã«JavaScriptæ§æã䜿çšããããšã§ãã ãªãã©ã«ãªããžã§ã¯ãã¯ã芪ã
Object.prototypeã§ããæ°ãããªããžã§ã¯ããå®çŸ©ããŸãïŒèŠªã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã
ãããã®å Žåã§ãããªãã©ã«ãªããžã§ã¯ãã®æ§æã䜿çšãããšãåçŽãªãªããžã§ã¯ããå®çŸ©ããŠãã®ããããã£ãåæåã§ããŸãã
Mikhailãªããžã§ã¯ããäœæããäŸãæžãæããŸãïŒ
var mikhail = { first_name: 'Mikhail' , last_name: 'WeiÃ' , age: 19 , gender: 'Male'
ç¡å¹ãªããããã£åã¯åŒçšç¬Šã§å²ãããšãã§ããŸãã ãªãã©ã«åœ¢åŒã®ã²ãã¿ãŒ/ã»ãã¿ãŒã®ãšã³ããªã¯ãå¿åé¢æ°ã«ãã£ãŠæ±ºå®ãããããšã«æ³šæããŠãã ããã 以åã«å®£èšããé¢æ°ãã²ãã¿ãŒ/ã»ãã¿ãŒã«
é¢é£ä»ããå Žåã¯ã
Object.definePropertyã¡ãœããã䜿çšããå¿
èŠããããŸãã
ãªãã©ã«æ§æã®äžè¬çãªã«ãŒã«ãèŠãŠã¿ãŸãããã
<object-literal> ::= "{" <property-list> "}" ; <property-list> ::= <property> ["," <property>]* ; <property> ::= <data-property> | <getter-property> | <setter-property> ; <data-property> ::= <property-name> ":" <expression> ; <getter-property> ::= "get" <identifier> : <function-parameters> : <function-block> ; <setter-property> ::= "set" <identifier> : <function-parameters> : <function-block> ; <property-name> ::= <identifier> | <quoted-identifier> ;
ãªãã©ã«ãªããžã§ã¯ãã¯ãJavaScriptã®åŒå
ã«è¡šç€ºã§ããŸãã ããã€ãã®ãããŸããã®ããã«ãåå¿è
ã¯æã
æ··ä¹±ããŸãïŒ
2.ã¡ãœãã
ãããŸã§ã®ãšããã
Mikhailãªããžã§ã¯ãã«ã¯ããŒã¿ãä¿åããããã®ã¹ããããããããŸããïŒ
nameããããã£ã®getter / setterãé€ãïŒã ãªããžã§ã¯ãã§å®è¡ã§ããã¢ã¯ã·ã§ã³ã®èšè¿°ã¯ãJavaScriptã§éåžžã«ç°¡åã«è¡ãããŸãã ã·ã³ãã«-JavaScriptã§ã¯ã
Function ã
Number ã
Objectãªã©ã®æäœã«éãããªãããã§ãã ãã¹ãŠãåãæ¹æ³ã§è¡ãããŸãïŒJavaScriptã®é¢æ°ãäžæµã®ãšã³ãã£ãã£ã§ããããšãå¿ããªãã§ãã ããïŒã
é¢æ°ãããããã£ã®å€ãšããŠèšå®ããã ãã§ããã®ãªããžã§ã¯ãã«å¯Ÿããã¢ã¯ã·ã§ã³ãèšè¿°ããŸãã ããšãã°ãããŒã·ã£ã«ä»ã®äººãæè¿ããŠãããããïŒ
ããããã£å€ãèšå®ããããåæ§ã®æ¹æ³ã䜿çšããŠããªããžã§ã¯ãã«é¢é£ä»ããããç¹å®ã®ããŒã¿ãèšå®ã§ããŸãã ãããã£ãŠãããããã£ã«ã¢ã¯ã»ã¹ãããšãããããã£ã«ä¿åãããŠããé¢æ°ãžã®ãªã³ã¯ãè¿ãããŸãã
mikhail.greet('you')
2.1ã ãã€ãããã¯ãã
greeté¢æ°ãèšè¿°ãããšãã«çæãã¹ãããšã®1ã€ã¯ããã®é¢æ°ã¯
nameããããã£ã®getter / setterã«ã¢ã¯ã»ã¹ããå¿
èŠãããããã®ããã«thisããžãã¯å€æ°ã䜿çšããããšã§ãã
å®è¡äžã®é¢æ°ãå±ãããªããžã§ã¯ããžã®åç
§ãä¿åããŸãã ããã¯ãå¿
ããããããé¢æ°
ãæ ŒçŽãããŠãããªããžã§ã¯ã
ãšåžžã«çããããšãæå³ããããã§ã¯ãããŸããã ããããJavaScriptã¯ããã»ã©å©å·±çã§ã¯ãããŸããã
é¢æ°ã¯
æ±çšã§ãã ã€ãŸã JavaScriptã§ã¯ã
thiså€æ°ã¯ãé¢æ°ã®å®è¡æã«è§£æ±ºããããã€ãããã¯ãªã³ã¯ãå®çŸ©ããŸãã
ããã«ãããJavaScriptãªããžã§ã¯ãã®åããåçã«å€æŽããããã®éåžžã«åŒ·åãªã¡ã«ããºã ãæäŸãããåçãªè§£æ±ºããã»ã¹ãæäŸãããç¹å®ã®æ§é ïŒã¯ã©ã¹ãªã©ïŒãžã®å³å¯ãªæºæ ã®æ¬ åŠãè£ãããŸãã ããã¯ããªããžã§ã¯ãã®é
眮æ¹æ³ã«é¢ä¿ãªããèµ·åã®èŠä»¶ãæºãããªããžã§ã¯ãã«é¢æ°ãé©çšã§ããããšãæå³ããŸãïŒ
CLOSãªã© ïŒã
2.2ã ãã®èš±å¯
é¢æ°ã®åŒã³åºãæ¹æ³ã«å¿ããŠãé¢æ°ã§
ãããæå¹ã«ãã4ã€ã®ç°ãªãæ¹æ³ããããŸããã¡ãœãããšããŠçŽæ¥ãã³ã³ã¹ãã©ã¯ã¿ãŒãšããŠæ瀺çã«é©çšãããŸãã æåã®3ã€ã確èªããåŸã§ãã¶ã€ããŒã«æ»ããŸãã
次ã®äŸã§ã¯ã次ã®ãã®ãåããŸãã
2.2.1ã¡ãœãããšããŠã®åŒã³åºã
é¢æ°ããªããžã§ã¯ãã¡ãœãããšããŠåŒã³åºãããå Žåãé¢æ°å
ã®
ããã¯ãªããžã§ã¯ãèªäœãåç
§ããŸãã ã€ãŸã ã©ã®ãªããžã§ã¯ããã¢ã¯ã·ã§ã³ãå®è¡ããããæ瀺çã«ç€ºããšããªããžã§ã¯ãã¯é¢æ°ã®
thisã®å€ã«ãªããŸãã
ããã¯ã
mikhail.greetïŒïŒãåŒã³åºããšãã«çºçããŸãã ãã®ãšã³ããªã¯ã
mikhailãªããžã§ã¯ãã«
ãããã€ã¢ã¯ã·ã§ã³ãé©çšããããšãJavaScriptã«äŒããŸãã
one.add(two.value)
2.2.2çŽæ¥åŒã³åºã
é¢æ°ãçŽæ¥åŒã³åºããããšã
ããã¯ãšã³ãžã³ã®ã°ããŒãã«ãªããžã§ã¯ãïŒãã©ãŠã¶ãŒã®
ãŠã£ã³ã㊠ãNode.jsã®
ã°ããŒãã« ïŒã«è§£æ±ºãããŸãã
add(two.value)
2.2.3ã æ瀺çãªé©çš
çµè«ãšããŠããªããžã§ã¯ãã«å¯Ÿå¿ããããããã£ããããã©ããã«é¢ä¿ãªããé¢æ°ã¯ä»»æã®ãªããžã§ã¯ãã«æ瀺çã«é©çšã§ããŸãã ãã®æ©èœã¯ã
callã¡ãœãããŸãã¯
applyã¡ãœããã䜿çšããŠå®çŸ
ãããŸãã
2ã€ã®ã¡ãœããã®éãã¯ãé¢æ°ã«æž¡ããããã©ã¡ãŒã¿ãŒãšå®è¡æéã§ããapplyã¯çŽæ¥åŒã³åºããããçŽ55åé
ããªã
ãŸãã ãéåžžã
åŒã³åºãã¯ããã»ã©æªããããŸããã ãã¹ãŠã¯çŸåšã®ãšã³ãžã³ã«äŸåããããã
Perfãã¹ãã䜿çšããŠç¢ºèªããŠãã ãããäºåã«ã³ãŒããæé©åããªãã§ãã ããã
ãããã®å Žåã§ãã
callã¯é¢æ°ã®æåã®ãã©ã¡ãŒã¿ãŒãšããŠãªããžã§ã¯ããæåŸ
ãããã®åŸã«å
ã®é¢æ°ãžã®éåžžã®åŒæ°ãç¶ããŸãã
add.call(two, 2, 2)
äžæ¹ã
applyã§ã¯ãå
ã®é¢æ°ã®ãã©ã¡ãŒã¿ãŒã®é
åã2çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠèšè¿°
ããããšãã§ããŸãã
add.apply(two, [2, 2])
ã¡ã¢ãžã
nullãŸãã¯
undefinedã® ãã®èš±å¯ã¯ã䜿çšãããšã³ãžã³ã®ã»ãã³ãã£ã¯ã¹ã«äŸåããããšã«æ³šæããŠãã ããã éåžžãçµæã¯ãé¢æ°ãã°ããŒãã«ãªããžã§ã¯ãã«é©çšããå Žåãšåãã§ãã ãããããšã³ãžã³ã
ã¹ããªã¯ãã¢ãŒãã§åäœããå Žåã
ããã¯æåŸ
ã©ããã«è§£æ±ºãããŸã-ãŸãã«ãããé©çšããããã®ïŒ
window.value = 2 add.call(undefined, 1)
2.3ã ã¡ãœãããã€ã³ãã£ã³ã°
JavaScriptã®é¢æ°ã®åçãªæ§è³ªãã泚æãããããŸããããé¢æ°ãç¹å®ã®ãªããžã§ã¯ãã«é¢é£ä»ããããšã«ãããé¢æ°ãäœæãããã¹ããã©ããŸãããã®ãããé¢æ°å
ã§
ããã¯ããªããžã§ã¯ãã¡ãœãããšããŠããŸãã¯çŽæ¥åŒã³åºãããæ¹æ³ã«é¢ä¿ãªããåžžã«ç¹å®ã®ãªããžã§ã¯ããæããŸãã
ãã®é¢æ°ã¯
bindãšããæ©èœãæäŸããŸãããªããžã§ã¯ããšè¿œå ã®ãã©ã¡ãŒã¿ãŒïŒ
callã®åŒã³åºãã«éåžžã«äŒŒãŠã
ãŸã ïŒãåãåããåŒã³åºããããšãã«å
ã®é¢æ°ã«ãã©ã¡ãŒã¿ãŒãé©çšããæ°ããé¢æ°ãè¿ããŸãã
var one_add = add.bind(one) one_add(2)
3.ç¶æ¿
ãããŸã§ããªããžã§ã¯ããã©ã®ããã«åäœã決å®ããä»ã®ãªããžã§ã¯ãã§ã©ã®ããã«ã¢ã¯ã·ã§ã³ã䜿çšã§ããããèŠãŠããŸãããããããŸã§ãã³ãŒãã®åå©çšãšãã®æ¡åŒµæ§ã®éåžžã®æ¹æ³ã¯èŠãŠããŸããã
ããã¯ãç¶æ¿ã圹ç«ã€å Žæã§ãã ããã«ããããªããžã§ã¯ããç¹æ®ãªåäœãå®çŸ©ããã¿ã¹ã¯ããä»ã®ãªããžã§ã¯ãã®å
±éã®åäœãäœæããããšããåé¢ã§ããŸãã
ãããã¿ã€ãã³ã°ã¢ãã«ã¯ããã«é²ãã§ããŸãã ãéžæçæ¡åŒµæ§ãããããã€ãã¢ã·ã§ã¢ãªã³ã°ããªã©ã®ãã¯ãããžãŒããµããŒãããŠããŸããããããã«ã€ããŠã¯ç¹ã«æ€èšããŸããã æ²ããããšã«ãJavaScriptã§å®è£
ãããŠããç¹å®ã®ãããã¿ã€ãOOã¢ãã«ã¯ããå¶éãããŠããŸãã ãããã®å¶éãåé¿ã§ããŸããããªãŒããŒãããã¯å€§ãããªããŸãã
3.1ã ãããã¿ã€ã
JavaScriptã®ç¶æ¿ã¯ããªããžã§ã¯ãã®åäœãè€è£œããç¹æ®ãªåäœã§æ¡åŒµããããšã§å®çŸãããŸãã åäœãè€è£œããããªããžã§ã¯ãã¯ã
ãããã¿ã€ããšåŒã°ããŸãã
ãããã¿ã€ãã¯ãä»ã®ãªããžã§ã¯ããšåäœãå
±æããéåžžã®ãªããžã§ã¯ãã§ãããã®å Žåã芪ãšããŠæ©èœããŸãã
ã¯ããŒã³äœæåäœã®æŠå¿µã¯ãåãé¢æ°ãŸãã¯ããŒã¿ã®2ã€ã®ç°ãªãã³ããŒãããããšãæå³ããŸããã å®éãJavaScriptã¯å§ä»»ãä»ããŠç¶æ¿ãå®è£
ããŠããŸãã ãã¹ãŠã®ããããã£ã¯èŠªã«ä¿åãããããããžã®ã¢ã¯ã»ã¹ã¯åãéããŠæ¡åŒµãããŸãã
åè¿°ã®ããã«ããªããžã§ã¯ãã®èŠªïŒãŸãã¯
[[Prototype]] ïŒã¯ã芪ãªããžã§ã¯ããåç
§ããæåã®åŒæ°ã§
Object.createãåŒã³åºãããšã«ããå®çŸ©ãããŸãã
Mishaã®äŸã«æ»ããŸãããã 圌ã®ååãšã圌ã®è¡åããã·ã£ãšå
±æããå¥ã®ãªããžã§ã¯ãã§äººã
ã«æšæ¶ããèœåãç¹å®ããŸãã ã¢ãã«ã¯æ¬¡ã®ããã«ãªããŸãã

JavaScriptã§å®è£
ããŸãã
var person = Object.create(null)
3.2ãããã [â£[ãããã¿ã€ã]â£]ã¯ã©ã®ããã«æ©èœããŸããïŒ
åã®äŸã§èŠãããã«ã
Mikhailã® Personã§å®çŸ©ãããŠããããããã£ã¯æ瀺çã«å®çŸ©ããŠããŸãããããããã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã ããã¯ãJavaScriptãããããã£ãžã®ã¢ã¯ã»ã¹ã®å§ä»»ãå®è£
ããŠãããšããäºå®ãã€ãŸã ããããã£ã¯ããªããžã§ã¯ãã®ãã¹ãŠã®èŠªãéããŠæ€çŽ¢ãããŸãã
ãã®èŠªã®ãã§ãŒã³ã¯ãåãªããžã§ã¯ãã®
[â£[ãããã¿ã€ã]â£]ãšåŒã°ããé ãã¹ãããã«ãã£ãŠå®çŸ©ãããŸãã çŽæ¥å€æŽããããšã¯ã§ããŸãããå€ãèšå®ããæ¹æ³ã¯1ã€ãããããŸãã-æ°ãããªããžã§ã¯ããäœæãããšãã§ãã
ãªããžã§ã¯ãããããããã£ãèŠæ±ããããšããšã³ãžã³ã¯æåã«ã¿ãŒã²ããããããããã£ãååŸããããšããŸãã ããããã£ãèŠã€ãããªãå Žåããªããžã§ã¯ãã®çŽæ¥ã®èŠªã次ã«èŠªã®èŠªãªã©ãèæ
®ãããŸãã
ããã¯ãããã°ã©ã ã®éäžã§ãããã¿ã€ãã®åäœãå€æŽã§ããããããç¶æ¿ããããã¹ãŠã®ãªããžã§ã¯ãã®åäœãèªåçã«å€æŽãããããšãæå³ããŸãã ããšãã°ãããã©ã«ãã®æšæ¶ãå€æŽãããšããŸãã
3.3ã ããããã£ã®ãªãŒããŒããŒã
ãã®ããããããã¿ã€ãã³ã°ïŒã€ãŸããç¶æ¿ïŒã䜿çšããŠãä»ã®ãªããžã§ã¯ããšããŒã¿ãå
±æã§ããŸãã ããã«ããã®æ¹æ³ã¯ã¡ã¢ãªã«é¢ããŠè¿
éãã€çµæžçã«æ©èœããŸãã 䜿çšãããããŒã¿ã®ã€ã³ã¹ã¿ã³ã¹ã¯åžžã«1ã€ã ãã§ãã
, ? , â .
,
Person ,
Person . , :

,
mikhail ,
kristin greet .
greet ,
greet ,
Person :
ç¶è¡ããã«ã¯...