2 KiB
2 KiB
Использование функции вопросов с каррингом
[importance 5]
Эта задача -- усложнённый вариант задачи . В ней объект user
изменён.
Теперь вместо двух функций user.loginOk()
и user.loginFail()
теперь один метод: user.loginDone(true/false)
, который нужно вызвать с true
при верном ответе и fail
-- при неверном.
Код ниже делает это, соответствующий фрагмент выделен.
Сейчас он обладает важным недостатком: при записи в user
другого значения объект перестанет корректно работать, вы увидите это, запустив пример ниже (будет ошибка).
Как бы вы написали правильно?
Исправьте выделенный фрагмент, чтобы код заработал.
//+ run
"use strict";
function ask(question, answer, ok, fail) {
var result = prompt(question, '');
if (result.toLowerCase() == answer.toLowerCase()) ok();
else fail();
}
var user = {
login: 'Василий',
password: '12345',
// метод для вызова из ask
loginDone: function(result) {
alert(this.login + (result ? ' вошёл в сайт' : ' ошибка входа'));
},
checkPassword: function() {
*!*
ask("Ваш пароль?", this.password,
function() { user.loginDone(true); },
function() { user.loginDone(false); }
);
*/!*
}
};
var vasya = user;
user = null;
vasya.checkPassword();
Изменения должны касаться только выделенного фрагмента.
Если возможно, предложите два решения, одно -- с использованием bind
, другое -- без него. Какое решение лучше?