1.6 KiB
1.6 KiB
Решение с bind
Первое решение -- передать в ask
функции с привязанным контекстом и аргументами.
//+ 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',
loginDone: function(result) {
alert(this.login + (result ? ' вошёл в сайт' : ' ошибка входа'));
},
checkPassword: function() {
*!*
ask("Ваш пароль?", this.password, this.loginDone.bind(this, true), this.loginDone.bind(this, false));
*/!*
}
};
user.checkPassword();
Решение с локальной переменной
Второе решение -- это скопировать this
в локальную переменную (чтобы внешняя перезапись не повлияла):
//+ 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',
loginDone: function(result) {
alert(this.login + (result ? ' вошёл в сайт' : ' ошибка входа'));
},
checkPassword: function() {
var self = this;
*!*
ask("Ваш пароль?", this.password,
function() { self.loginDone(true); },
function() { self.loginDone(false); }
);
*/!*
}
};
user.checkPassword();
Оба решения хороши, вариант с bind
короче.