å彿°å¨ç»å½ä¸çåºç¨
éè¦ç¨åº¦: 5
è¿ä¸ªä»»å¡æ¯æ¯ ä¿®å¤ä¸¢å¤±äº "this" ç彿° ç¥å¾®å¤æçåä½ã
user 对象被修æ¹äºãç°å¨ä¸æ¯ä¸¤ä¸ªå½æ° loginOk/loginFailï¼ç°å¨åªæä¸ä¸ªå½æ° user.login(true/false)ã
å¨ä¸é¢ç代ç ä¸ï¼æä»¬åºè¯¥å askPassword ä¼ å
¥ä»ä¹åæ°ï¼ä»¥ä½¿å¾ user.login(true) ç»ææ¯ okï¼user.login(false) ç»ææ¯ failï¼
function askPassword(ok, fail) {
let password = prompt("Password?", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'John',
login(result) {
alert( this.name + (result ? ' logged in' : ' failed to log in') );
}
};
askPassword(?, ?); // ?
ä½ åªè½ä¿®æ¹é«äº®é¨åç代ç ã
-
使ç¨å è£ ï¼wapperï¼å½æ°ï¼ç®å¤´å½æ°å¾ç®æ´ï¼
askPassword(() => user.login(true), () => user.login(false));ç°å¨å®ä»å¤é¨åéä¸è·å¾äº
userï¼ç¶åä»¥å¸¸è§æ¹å¼è¿è¡å®ã -
æè ä»
user.loginå建ä¸ä¸ªå彿°ï¼è¯¥å½æ°ä½¿ç¨userä½ä¸ºä¸ä¸æï¼å¹¶å ·ææ£ç¡®ç第ä¸ä¸ªåæ°ï¼askPassword(user.login.bind(user, true), user.login.bind(user, false));