ÐипÑавÑе ÑÑнкÑÑÑ, Ñка вÑÑаÑила 'this'
Ðиклик askPassword() в ÐºÐ¾Ð´Ñ Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ñе повинен пеÑевÑÑÑÑи паÑÐ¾Ð»Ñ Ñа викликаÑи user.loginOk/loginFail в залежноÑÑÑ Ð²Ñд вÑдповÑдÑ.
Ðле Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð´Ñ Ð¿ÑизводиÑÑ Ð´Ð¾ помилки. ЧомÑ?
ÐипÑавÑе видÑлений ÑÑдок, Ñоб код запÑаÑÑвав пÑавилÑно (ÑнÑÑ ÑÑдки не маÑÑÑ Ð±ÑÑи змÑненÑ).
function askPassword(ok, fail) {
let password = prompt("ÐаÑолÑ?", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'Ðван',
loginOk() {
alert(`${this.name} ÑвÑйÑов`);
},
loginFail() {
alert(`${this.name} виконав Ð½ÐµÐ²Ð´Ð°Ð»Ñ ÑпÑÐ¾Ð±Ñ Ð²Ñ
одÑ`);
},
};
askPassword(user.loginOk, user.loginFail);
Ðомилка Ð²Ð¸Ð½Ð¸ÐºÐ°Ñ ÑÐ¾Ð¼Ñ Ñо askPassword оÑÑимÑÑ ÑÑнкÑÑÑ loginOk/loginFail без обâÑкÑÑ.
Ðоли askPassword Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ ÑÑ
, ÑÑ
конÑекÑÑ Ð²ÑÑаÑено this=undefined.
СпÑобÑÑмо викоÑиÑÑаÑи bind, Ñоб пÑивâÑзаÑи конÑекÑÑ:
function askPassword(ok, fail) {
let password = prompt("ÐаÑолÑ?", '');
if (password == "rockstar") ok();
else fail();
}
let user = {
name: 'Ðван',
loginOk() {
alert(`${this.name} ÑвÑйÑов`);
},
loginFail() {
alert(`${this.name} виконав Ð½ÐµÐ²Ð´Ð°Ð»Ñ ÑпÑÐ¾Ð±Ñ Ð²Ñ
одÑ`);
},
};
askPassword(user.loginOk.bind(user), user.loginFail.bind(user));
Ð¢ÐµÐ¿ÐµÑ Ñе пÑаÑÑÑ.
ÐлÑÑеÑнаÑивне ÑÑÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð³Ð»Ð¾ б бÑÑи:
//...
askPassword(() => user.loginOk(), () => user.loginFail());
ÐазвиÑай Ñе Ñакож пÑаÑÑÑ Ñа ÑÑдово виглÑдаÑ.
Ðле Ñе не Ñак надÑйно, бо в ÑкладнÑÑиÑ
ÑиÑÑаÑÑÑÑ
змÑнна user може змÑниÑиÑÑ Ð¿ÑÑÐ»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ askPassword, але пеÑед викликом () => user.loginOk().