JavaScript метод bind()
JavaScript FunctionОпределение и применение
JavaScript метод bind() возвращает новую функцию, которая вызывается как метод объекта, устанавливая ее контекст исполнения (this) в указанное значение. В качестве аргументов эта функция будет получать аргументы, переданные методу bind(), за которыми следуют аргументы, переданные уже непосредственно новой функции.
Поддержка браузерами
Метод | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
bind() | Да | Да | Да | Да | Да | Да |
JavaScript синтаксис:
// без передачи дополнительных аргументов, которые должны быть связаны с функцией function.bind( thisArg ); //с указанием дополнительных аргументов, которые должны быть связаны с функцией function.bind( thisArg, arg1, ...argX );
Версия JavaScript
1.8.5 (ECMAScript 5.1)Значения параметров
Параметр | Описание |
---|---|
thisArg | Значение, передаваемое в качестве параметра this целевой функции при вызове связанной функции. Значение игнорируется, если связанная функция создается с помощью оператора new. Обязательное значение. |
args | Ноль или более значений аргументов, которые должны быть связаны с функцией. Необязательный параметр. |
Пример использования
let obj = { // инициализируем переменную, содержащую объект a: 100, b: 200 }; // функция возвращает сумму трех значений let func = function( c ) { return this.a + this.b + c }; // переменная содержит новую функцию, которая вызывается как метод объекта let newFunc = func.bind( obj, 300 ); newFunc(); // возвращаемое значение 600
В следующем примере мы создадим новую функцию путём фиксирования аргументов существующей (частичное применение), этот прием в функциональном программировании называется каррингом (currying):
// функция возвращает произведение 2 аргументов let multiply = function( a,b ) { return a * b }; // создаем новую функцию, подобную multiply, но с контекстом равным null и первым аргументом равным 3 let triple = multiply.bind( null, 3 ); // новая функция принимает один аргумент triple(2) // 6 (первый аргумент связан со значением 3, а значение 2 передается в качестве второго аргумента) triple(3) // 9 (первый аргумент связан со значением 3, а значение 3 передается в качестве второго аргумента) triple(4) // 12 (первый аргумент связан со значением 3, а значение 4 передается в качестве второго аргумента)JavaScript Function