ä¿®å¤ä¸¢å¤±äº "this" ç彿°
éè¦ç¨åº¦: 5
ä¸é¢ä»£ç ä¸å¯¹ askPassword() çè°ç¨å°ä¼æ£æ¥ passwordï¼ç¶ååºäºç»æè°ç¨ user.loginOk/loginFailã
使¯å®å¯¼è´äºä¸ä¸ªé误ã为ä»ä¹ï¼
ä¿®æ¹é«äº®çè¡ï¼ä»¥ä½¿ææå 容é½è½æ£å¸¸å·¥ä½ï¼å ¶å®è¡ä¸ç¨ä¿®æ¹ï¼ã
function askPassword(ok, fail) {
let password = prompt("Password?", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'John',
loginOk() {
alert(`${this.name} logged in`);
},
loginFail() {
alert(`${this.name} failed to log in`);
},
};
askPassword(user.loginOk, user.loginFail);
åçäºé误æ¯å 为 ask è·å¾çæ¯æ²¡æç»å®å¯¹è±¡ç loginOk/loginFail 彿°ã
å½ ask è°ç¨è¿ä¸¤ä¸ªå½æ°æ¶ï¼å®ä»¬èªç¶ä¼è®¤å® this=undefinedã
让æä»¬ bind ä¸ä¸æï¼
function askPassword(ok, fail) {
let password = prompt("Password?", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'John',
loginOk() {
alert(`${this.name} logged in`);
},
loginFail() {
alert(`${this.name} failed to log in`);
},
};
askPassword(user.loginOk.bind(user), user.loginFail.bind(user));
ç°å¨å®è½æ£å¸¸å·¥ä½äºã
å¦ä¸ä¸ªå¯æ¿æ¢è§£å³æ¹æ¡æ¯ï¼
//...
askPassword(() => user.loginOk(), () => user.loginFail());
é常è¿ä¹è½æ£å¸¸å·¥ä½ï¼ä¹çèµ·æ¥æºå¥½çã
使¯å¯è½ä¼å¨æ´å¤æçåºæ¯ä¸å¤±æï¼ä¾å¦åé user å¨è°ç¨ askPassword ä¹åä½å¨è®¿é®è
åºçåè°ç¨ () => user.loginOk() ä¹å被修æ¹ã