ãã®ã»ã¯ã·ã§ã³ã§ã¯ãç¹æ®ãªã±ã¼ã¹ãããçè§£ããããã®é«åº¦ãªãããã¯ã«ã¤ãã¦èª¬æãã¾ãã
ããªããéãèªã¿é²ãããã®ã§ããã°ãã¹ãããã¾ãã¯å¥ã®æ©ä¼ã«è¦ã¦ãã ããã
è¤éãªã¡ã½ããå¼ã³åºãã¯ã this ã失ãå¯è½æ§ãããã¾ããä¾ãã°:
let user = {
name: "John",
hi() { alert(this.name); },
bye() { alert("Bye"); }
};
user.hi(); // John (ã·ã³ãã«ãªå¼ã³åºãã¯åä½ãã¾ã)
// ä»ãname ã«å¿ã㦠user.hi ã¾ã㯠user.bye ãèªãã§ã¿ã¾ããã
(user.name == "John" ? user.hi : user.bye)(); // Error!
æå¾ã®è¡ã§ã¯ãuser.hi ã user.bye ã鏿ããä¸é
æ¼ç®åãããã¾ãããã®ã±ã¼ã¹ã§ã¯ãçµæã¯ user.hi ã§ãã
ã¡ã½ããã¯ä¸¸æ¬å¼§ () ã§ããã«å¼ã³åºããã¾ããããããããã¯æ£ããåãã¾ãã!
å¼ã³åºãã¯ã¨ã©ã¼ã«ãªãã¾ãããªããªããå¼ã³åºãã®å
å´ã® "this" ã®å¤ã¯ undefined ã«ãªãããã§ãã
ããã¯åãã¾ã (ãªãã¸ã§ã¯ããããã¡ã½ãã):
user.hi();
ããã¯ãã¡ã§ã (è©ä¾¡ãããã¡ã½ãã):
(user.name == "John" ? user.hi : user.bye)(); // Error!
ãªãã§ãããï¼ãªããã®ãããªãã¨ãèµ·ããã®ãçè§£ãããå ´åãobj.method() ã®å¼ã³åºããã©ã®ããã«æ©è½ããã®ããçè§£ãã¦ã¿ã¾ãããã
åç §åã®èª¬æ
ããè¦ãã¨ã obj.method() æã«2ã¤ã®æä½ãããã¾ã:
- ã¾ããããã
'.'ãããããã£obj.methodãæ½åºãã¾ãã - 次ã«ã丸æ¬å¼§
()ã§ãããå®è¡ãã¾ãã
ããã¦ãthis ã«ã¤ãã¦ã®æ
å ±ã¯æåã®å¦çããï¼ã¤ç®ã®å¦çã¸ã©ã®ããã«æ¸¡ãããã§ãããï¼
ãããã®æä½ãå¥ã
ã®è¡ã«æ¸ããå ´åãthis ã失ãããã®ã¯æããã§ããã:
let user = {
name: "John",
hi() { alert(this.name); }
}
// ã¡ã½ããã®åå¾å¼ã³åºãã2è¡ã«åãã¾ã
let hi = user.hi;
hi(); // Error, this 㯠undefined ãªã®ã§
ããã§ hi = user.hi ã¯é¢æ°ã夿°ã®ä¸ã«ããã¦ãã¾ããããã¦æå¾ã®è¡ã¯å®å
¨ã«ç¬ç«ãã¦ãã¾ãããªã®ã§ãthis ãããã¾ããã
user.hi() å¼ã³åºããåä½ãããããã«ãJavaScriptã¯ããªãã¯ã使ãã¾ã â ããã '.' ã¯é¢æ°ã§ã¯ãªããç¹å¥ãªåç
§åãè¿ãã¾ãã
åç §å㯠â仿§ä¸ã®åâ ã§ããç§ãã¡ã¯æç¤ºçã«ããã使ããã¨ã¯ã§ãã¾ããããè¨èªã®ä¸ã§å é¨çã«ä½¿ããã¦ãã¾ãã
åç
§åã®å¤ã¯ãï¼ã¤ã®å¤ã®çµã¿åãã (base, name, strict) ã§ããããã§:
baseã¯ãªãã¸ã§ã¯ãã§ããnameã¯ããããã£ã§ããstrictã¯use strictãå¹ãã¦ããå ´å㯠true ã§ãã
user.hi ã¸ã®ããããã£ã¢ã¯ã»ã¹ã®çµæã¯ã颿°ã§ã¯ãªãåç
§åã§ããstrict mode ã§ã® user.hi ã¯ãããªãã¾ã:
// åç
§åã®å¤
(user, "hi", true)
åç
§åã«å¯¾ãã¦ä¸¸æ¬å¼§ () å¼ã³åºãããããã¨ããããã¯ãªãã¸ã§ã¯ãã¨ãã®ã¡ã½ããã«ã¤ãã¦ã®å®å
¨ãªæ
å ±ãåãåããæ£ãã this (ãã®ã±ã¼ã¹ã§ã¯ user)ãã»ããã§ãã¾ãã
åç
§åã¯ããã . ããå¼ã³åºãæ¬å¼§ () ã¸æ
å ±ãæ¸¡ãç®çã®ç¹å¥ãª âä¸éâ ã®å
é¨åã§ãã
代å
¥ hi = user.hi ã®ãããªä»ã®æä½ã¯ãåç
§åãç ´æ£ããuser.hi(颿°)ã®å¤ã渡ãã¾ããå¾ã£ã¦ããã以éã®æä½ã¯å
¨ã¦ this ã â失ãã¾ãâã
ãªã®ã§ãçµæã¨ãã¦ãthis ã®å¤ã¯ã颿°ãããã obj.method()ããããã¯è§æ¬å¼§ obj[method]()æ§æã使ã£ã¦ç´æ¥å¼ã³åºãããå ´åã®ã¿æ£ããæ¸¡ããã¾ãããã®ãã¥ã¼ããªã¢ã«ã®å¾åã§ã¯ãfunc.bind() ãªã©ããã®åé¡ã解決ããããã®ãã¾ãã¾ãªæ¹æ³ãå¦ã³ã¾ãã
ãµããª
åç §åã¯è¨èªã®å é¨ã®åã§ãã
obj.method() å
ã® . ã®ãããªããããã£ã®èªã¿åãã§ã¯ãæ£ç¢ºãªããããã£å¤ã§ã¯ãªãããããã£å¤ã¨ãããåå¾ããããªãã¸ã§ã¯ãã®ä¸¡æ¹ãä¿æããç¹å¥ãª âåç
§åâ ã®å¤ãè¿ãã¾ãã
ããã¯ãã®å¾ã«ç¶ãã¡ã½ããå¼ã³åºã () ããªãã¸ã§ã¯ããåå¾ãããã« this ãè¨å®ããããã§ãã
ãã®ä»ãã¹ã¦ã®æä½ã§ã¯ãåç §åã¯èªåçã«ããããã£å¤ã«ãªãã¾ãï¼ä¸ã®ã±ã¼ã¹ã§ã¯é¢æ°ï¼ã
ãã®ã¡ã«ããºã å ¨ä½ã¯æã ã®ç®ããã¯è¦ãã¾ãããå¼ã使ç¨ãã¦ãã¡ã½ããããªãã¸ã§ã¯ãããåçã«åå¾ãããå ´åãªã©ãå¾®å¦ãªã±ã¼ã¹ã§ã®ã¿åé¡ã«ãªãã¾ãã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã