this ê°ì´ undefinedì¸ í¨ì ê³ ì¹ê¸°
ìë í¨ì askPassword()ë ë¹ë°ë²í¸ë¥¼ 먼ì íì¸íê³ ê·¸ ê²°ê³¼ì ë°ë¼ user.loginOkë user.loginFailì í¸ì¶í´ì¼ í©ëë¤.
ê·¸ë°ë° í¨ì를 í¸ì¶íë©´ ìë¬ê° ë°ìí©ëë¤. ìë¬ë ì ë°ìíìê¹ì?
ìë¬ê° ë°ìíì§ ìëë¡ ìì¹ ë ì¤ì ê³ ì³ë³´ì¸ì. ë¤ë¥¸ ì¤ì ë°ê¾¸ì§ ììì¼ í©ëë¤.
function askPassword(ok, fail) {
let password = prompt("ë¹ë°ë²í¸ë¥¼ ì
ë ¥í´ì£¼ì¸ì.", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'John',
loginOk() {
alert(`${this.name}ëì´ ë¡ê·¸ì¸íììµëë¤.`);
},
loginFail() {
alert(`${this.name}ëì´ ë¡ê·¸ì¸ì ì¤í¨íììµëë¤.`);
},
};
askPassword(user.loginOk, user.loginFail);
ìë¬ë askê° í¨ì loginOk, loginFailì ê°ì²´ ìì´ ê°ì§ê³ ì¤ê¸° ë문ì ë°ìí©ëë¤.
askë loginOk, loginFailì í¸ì¶í ë this=undefinedë¼ê³ ìì°ì¤ë ê°ì í©ëë¤.
bind í¨ì를 ì¬ì©í´ 컨í
ì¤í¸ë¥¼ ê³ ì ìì¼ ë´
ìë¤.
function askPassword(ok, fail) {
let password = prompt("ë¹ë°ë²í¸ë¥¼ ì
ë ¥í´ì£¼ì¸ì.", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'John',
loginOk() {
alert(`${this.name}ëì´ ë¡ê·¸ì¸íììµëë¤.`);
},
loginFail() {
alert(`${this.name}ëì´ ë¡ê·¸ì¸ì ì¤í¨íììµëë¤.`);
},
};
askPassword(user.loginOk.bind(user), user.loginFail.bind(user));
ì´ì ì ëìí©ëë¤.
ì´ ì¸ìë ë¤ë¥¸ ëµì´ ìëë°, ìëìì íì¸ ê°ë¥í©ëë¤.
//...
askPassword(() => user.loginOk(), () => user.loginFail());
ì´ë ê² íì´í í¨ì를 ì¬ì©íë ë°©ë² ëí ëê° ì ëìíë©° ê°ë ì±ë ì¢ìµëë¤.
ë¤ë§ ì´ ë°©ë²ì askPasswordê° í¸ì¶ëì¼ë ì¬ì©ìê° í롬íí¸ ëíììì ê°ì ì ì¶íê³ () => user.loginOk()를 í¸ì¶í기 ì ì user ë³ìê° ë°ëë ë±ì ë³µì¡í ìí©ììë ì¤ìëí ê°ë¥ì±ì´ ììµëë¤.