JavaScriptã§thisã䜿ããããã«ãªãïŒthisã®åç §å ã説æ
thisã¯ããã°ã©ã ãèšè¿°ããäžã§äŸ¿å©ãªå€æ°ã§ãJavaScriptãåŠç¿ããäžã§èŠããŠãããããã®ã®äžã€ã§ããthisã¯äœ¿çšãããå Žæã«ãã£ãŠåç §ãã察象ãå€ãããšããæ§è³ªãæã£ãŠããã颿°ãã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãªã©ã§ããããå 容ãå€ãã£ãŠããŸãã®ã§ãæ··ä¹±ããããšã®ãªããããã£ãããšçè§£ããŠãããŸããããJavaScriptã®ããã°ã©ã äžã§ã¯ããthisããšèšã倿°ã䜿ãããŠããããšãçãããããŸããã䜿ãããªãããšãã§ããã°ãšãŠã䟿å©ãªãã®ã§ãããæ§è³ªãçè§£ããªããŸãŸäœ¿çšãããšæ··ä¹±ããŠããŸãããšãèããããŸãã
ä»åã¯ãthisã«ã©ããªæå³ãããã®ãã®è§£èª¬ãšãåºæ¬çãªäœ¿ãæ¹ã«ã¯ã©ã®ãããªãã®ãããã®ãã玹ä»ããŠãããŸãã
JavaScriptã«åºãŠããthisãšã¯ïŒ
thisã¯ã¹ã¯ãªããå ã®ã©ãããã§ãå©çšã§ããç¹å¥ãªå€æ°ã§ããã©ãã§ãåç §ããããšãã§ãããšããå€ãã£ãæ§è³ªãæã£ãŠãããã¡ãœããã®ãããªæ§æããªãã·ã§ã³èšå®ãååšããŸããã
ãããããã®ããã«thisãã®ãã®ã®å®æ ã¯åããã«ãããééã£ãããã°ã©ã ãèšè¿°ããŠããŸãããšããããŸããçµæçã«ãã°ãçãåå ã«ããªãããããããthisã®äœ¿ãæ¹ã«ã¯ååæ³šæããå¿ èŠããããŸãã
äžèº«ã®å€åãã倿°
thisã®æ§è³ªãç°¡åã«èª¬æãããš**ãäžèº«ãå€åãã倿°ã**ã§ãããšèšããã©ã®ãããªæèã§äœ¿çšããã®ããéèŠã«ãªã£ãŠããŸãããŸãã¯ãthisãã©ãã§äœ¿çšãããšäœãåç §ããã®ããçè§£ã§ããããã«ãªããŸãããã
åŒã³åºãæ¹ã«å¯Ÿå¿ããthisã®åç §å
䜿çšå Žé¢ã«ãã£ãŠäžèº«ãç°ãªãthisã®å
·äœäŸãèŠãŠãããŸãããã
ããã§ã¯ã䜿çšå Žé¢ãå€ã颿°ãã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãcallã¡ãœããããã³applyã¡ãœããã«ãããthisã®äœ¿ãæ¹ã玹ä»ããŠãããŸãã
颿°ã§ã®åŒã³åºã
ãã颿°ã®äžã§thisã䜿çšããå Žåãthisã¯ã°ããŒãã«ãªããžã§ã¯ããåç §ããŸããã°ããŒãã«ãªããžã§ã¯ããšã¯ãã°ããŒãã«å€æ°ãã°ããŒãã«é¢æ°ã管çããããã®JavaScriptã«ããã䟿å®çãªãªããžã§ã¯ãã§ãããã€ã³ã¹ã¿ã³ã¹åãªã©ã¯ã§ããŸããã
function sample() {
console.log(this);
}
sample();
ãªã©ãšèšè¿°ããã°ã°ããŒãã«ãªããžã§ã¯ããäŸãã°Windowãªããžã§ã¯ããªã©ã衚瀺ãããŸããWindowãªããžã§ã¯ããšã¯ãJavaScriptã®ãªããžã§ã¯ãéå±€æäžäœã«äœçœ®ãããªããžã§ã¯ãã§ããã¹ãŠã®ãªããžã§ã¯ãã®èŠªãšãªããŸããåã«é¢æ°å ã§thisã䜿ã£ãå Žåã«ã¯ãã®ããã«ã°ããŒãã«ãªããžã§ã¯ããåç §ããŸãã
ã¡ãªã¿ã«é¢æ°ã®å€ããããã¬ãã«ã«ãããŠthisã䜿çšããå Žåãåãããã«ã°ããŒãã«ãªããžã§ã¯ããåç §ããŸãã
ã¡ãœããã§ã®åŒã³åºã
ã¡ãœããã§èªã¿åºãå ŽåãåŒã³åºãå ã®ãªããžã§ã¯ããåç §ããããšã«ãªããŸãã以äžã®ãããªããã°ã©ã äŸãå®è¡ããŠã¿ãŸãããã颿°ã§åŒã³åºãããšããšã¯ç°ãªãçµæãåŸãããŸãã
var sample = {
myFunction: function() {
console.log( this );
}
}
sample.myFunction();
ä»åºŠã¯å
ããçšæãããŠããã°ããŒãã«ãªããžã§ã¯ãã§ã¯ãªããçæãããªããžã§ã¯ãsampleãåç
§ããŠããããšãåããããšæããŸãã
ãã ããã¡ãœããã§ã¯ãªããããããã£ã®å Žåã«ã¯çæãããªããžã§ã¯ããåç
§ããŸãããããããã£ã®å€ãthisã§ä»£å
¥ãããšããŠãããã®ããããã£ãä¿æãããªããžã§ã¯ãåãåç
§ãããããšã¯ãªããã°ããŒãã«ãªããžã§ã¯ããåç
§ãããã ãã§ãã
ã³ã³ã¹ãã©ã¯ã¿ã§ã®åŒã³åºã
ã³ã³ã¹ãã©ã¯ã¿ã§åŒã³åºãå Žåãthisã¯çæããã€ã³ã¹ã¿ã³ã¹ãåç §ããããšã«ãªããŸãã以äžã®ããã°ã©ã äŸãèŠãŠã¿ãŸãããã
var Sample = function(price) {
this.price = price;
}
var money = new Sample(100);
console.log(money);
ãã®ããã°ã©ã ãå®è¡ãããšãçæããã€ã³ã¹ã¿ã³ã¹ãSampleããåç §ããŸãã
call/applyã¡ãœããã§ã®åŒã³åºã
次ã«ãcallã¡ãœããããã³applyã¡ãœããã§åŒã³åºããå Žåã«thisãåç
§ãããã®ã説æããŸãããããã¯åŒæ°ã§æå®ããããªããžã§ã¯ãããšããããšã«ãªããŸãã
äŸãã°ãæåã«ç޹ä»ãã颿°å
ã§ã®thisã®åŒã³åºãã§ã¯ã°ããŒãã«ãªããžã§ã¯ããåç
§ãããŠããŸããããcallã¡ãœãããapplyã¡ãœããã䜿ãããšã§ã°ããŒãã«ãªããžã§ã¯ã以å€ã®ä»»æã®ãªããžã§ã¯ããåç
§ããããã«å€ããããšãã§ããŸãã
颿°.callïŒãªããžã§ã¯ãåïŒ
ãããã¯
颿°.applyïŒãªããžã§ã¯ãåïŒ
ãšããããã«èšè¿°ãããšåç §å ã®ãªããžã§ã¯ããæå®ã§ããŸãã
var myObj = {
ãnumber: 1
}
function sample() {
console.log(this);
}
sample.call(myObj);
sample.apply(myObj);
ãã®ããã°ã©ã ãå®è¡ããã°ãcallã¡ãœãããšapplyã¡ãœããã«ãã£ãŠæå®ããããªããžã§ã¯ããmyObjããåç
§ãããŸãã
ãã®ãããªäœ¿ãæ¹ã ãšcallã¡ãœãããapplyã¡ãœãããåãçµæã«ãªããŸããããããã¯å®è¡ãã颿°ã«æž¡ãåŒæ°ã®æå®æ¹æ³ãç°ãªããŸããcallã¡ãœããã§ã¯å€ãåã
ã«æå®ããŸãããapplyã¡ãœããã§ã¯é
åã§ãããæž¡ããŸãã
ã¢ããŒé¢æ°ã«ãããthisã®äœ¿ãæ¹
ES6ããã¯ã¢ããŒé¢æ°ãšåŒã°ãããã®ãå©çšã§ããŸããã¢ããŒé¢æ°ã䜿ãã°é¢æ°ãªãã©ã«ã¯ç°¡åã«èšè¿°ã§ããããã«ãªããŸãã
äŸãã°ãfunctionããŒã¯ãŒãã¯æžãå¿ èŠããªããªãããã®ä»£ããã«ã¢ããŒïŒ=>ïŒã§åŒæ°ãšé¢æ°ãã€ãªãã ãã§ãããªããŸããããã«é¢æ°ã®æ¬äœãèšè¿°ããå Žåãéåžžã¯æ³¢æ¬åŒ§ïœïœã§ãããã¯ã衚ããŸãããæ¬äœã1æã§ããã°ãããçç¥ããããšãã§ããŸããã»ãã«ããreturnåœä»€ãçç¥ã§ãããªã©ãäœ¿ãæ¹ãç¥ãã°ããã°ã©ã ãèšè¿°ããã¹ããŒããäžããããã§ãããã
ãã ããthisããã®ã¢ããŒé¢æ°ã«ãããŠäœ¿çšããå Žåã«ã¯æ³šæãå¿ èŠã§ãããªããªãã¢ããŒé¢æ°ã§ã¯thisãåºå®ãããšããæ§è³ªãããããã§ãã
ã¢ããŒé¢æ°ã䜿ã£ãŠåºåããŠã¿ãŸãã
x = 'Global';
let myFunc = () => {
console.log(this.x);
}
let y1 = {
param: 'y1',
func: myFunc
}
let y2 = {
param: 'y2',
func: myFunc
}
y1.func();
y2.func();
ãã®å Žåã«ã¯ãy1ããy2ããšã¯è¡šç€ºããããã©ã¡ãããGlobalããšè¡šç€ºãããããã«ãªããŸããã€ãŸããæåã«å®£èšãããæç¹ã§thisã®å å®¹ãæ±ºãŸã£ãŠãããšããããšãåããããšæããŸãã
ãŸãšã
thisã¯ã䜿ãå Žé¢ã«ãã£ãŠãã®äžèº«ãå€ãã䟿å©ãªå€æ°ã§ãããã ããthisãã©ããåç §ããŠããã®ããçè§£ããŠäœ¿ããªããšäœãæå³ããã®ãåãããªããªããæãã¬æåãèµ·ããããšã«ããªããããŸããã
颿°ã«ãããŠthisã䜿ã£ãå Žåã«ã¯ã°ããŒãã«ãªããžã§ã¯ããã¡ãœããã§ã¯åŒã³åºãå ã®ãªããžã§ã¯ããã³ã³ã¹ãã©ã¯ã¿ã§ã¯ã€ã³ã¹ã¿ã³ã¹ãcallã¡ãœããããã³applyã¡ãœããã§ã¯åŒæ°ã§æå®ãããªããžã§ã¯ããåç §ãããŸãã
ããã«ãES6ããç»å Žããã¢ããŒé¢æ°ã䜿çšããå Žåã«ã¯ããã§ã®thisã®åãã«æ³šæãã宣èšãããšããã§äžèº«ãåºå®ããããšããããšãæèããŠäœ¿ã£ãŠãããªããã°ãªããŸããã













