let bound = func.bind(context);
Example 1
const eurostar = {
railways: "Eurostar",
trainNumber: "1234",
bookings: [],
book(city, name) {
console.log(`${name} booked a seat on ${this.railways} travel to ${city}`);
this.bookings.push({ travel: `${this.trainNumber}`, name });
},
};
const thalys = {
railways: "Thalys",
trainNumber: "4321",
bookings: [],
};
const book = eurostar.book;
const bookThalys = book.bind(thalys);
bookThalys("Paris", "Eva Red"); // Eva Red booked a seat on Thalys travel to ParisExample 2
function askPassword(ok, fail) {
let password = prompt("Password?", "");
if (password == "qwerty") ok();
else fail();
}
let user = {
name: "Ivy",
loginOk() {
alert(`${this.name} logged in`);
},
loginFail() {
alert(`${this.name} failed to log in`);
},
};
askPassword(user.loginOk.bind(user), user.loginFail.bind(user));Example 3
function enterPassword(success, fail) {
let password = prompt("Password?", "");
if (password == "12345") success();
else fail();
}
let user = {
name: "Petr",
login(result) {
alert(this.name + (result ? " logged in" : " failed to log in"));
},
};
enterPassword(?, ?);Answer
Arrow function
enterPassword(
() => user.login(true),
() => user.login(false),
);or
enterPassword(user.login.bind(user, true), user.login.bind(user, false));Partial application
let bound = func.bind(context, [arg1], [arg2], ...);
const addTax = (rate, value) => value + value * rate;
const addVAT = addTax.bind(null, 0.23);
addVAT(200);Or:
const addTaxRate = function (rate) {
return function (value) {
return value + value * rate;
};
};
const addVAT = addTaxRate(0.23);
addVAT(200);One more example:
const sum = function (a, b) {
return a + b;
};
let oneArg = sum.bind(null, 5);
oneArg(1);
oneArg(2);