1 | const expose = require('./expose');
|
2 | const { assign } = Object;
|
3 |
|
4 | /**
|
5 | * Bind an infinite set of methods to a class instance.
|
6 | *
|
7 | * @param {Object} instance
|
8 | * Instance of a class
|
9 | * @param {...string} methods
|
10 | * Method names of a class
|
11 | */
|
12 | function bind(instance, ...methods) {
|
13 | const reduceBoundMethods = (accumulator, name) =>
|
14 | assign(accumulator, {
|
15 | [name]: instance[name].bind(instance),
|
16 | });
|
17 | const boundMethods = methods.reduce(reduceBoundMethods, {});
|
18 |
|
19 | assign(instance, boundMethods);
|
20 | }
|
21 |
|
22 | module.exports = expose({
|
23 | bind,
|
24 | });
|