Книга: Выразительный JavaScript
Связывание
Связывание
Метод bind
, который есть у всех функций, создаёт новую функцию, которая вызовет оригинальную, но с некоторыми фиксированными аргументами.
Следующий пример показывает, как это работает. В нём мы определяем функцию isInSet
, которая говорит, есть ли имя человека в заданном наборе. Для вызова filter
мы можем либо написать выражение с функцией, которое вызывает isInSet
, передавая ей набор строк в качестве первого аргумента, или применить функцию isInSet
частично.
var theSet = ["Carel Haverbeke", "Maria van Brussel",
"Donald Duck"];
function isInSet(set, person) {
return set.indexOf(person.name) > -1;
}
console.log(ancestry.filter(function(person) {
return isInSet(theSet, person);
}));
// ? [{name: "Maria van Brussel", …},
// {name: "Carel Haverbeke", …}]
console.log(ancestry.filter(isInSet.bind(null, theSet)));
// ? … тот же результат
Вызов bind
возвращает функцию, которая вызовет isInSet
с первым аргументом theSet
, и последующими аргументами такими же, какие были переданы в bind
.
Первый аргумент, который сейчас установлен в null
, используется для вызовов методов – так же, как было в apply
. Мы поговорим об этом позже.
- Связывание (binding)
- Связывание с нужным объектом каталога
- Неявное связывание
- Явное связывание
- Пример: явное связывание функци и преобразования файлов
- Связывание сокета
- 3.2. Экспорт данных из ERwin в BPwin и связывание объектов модели данных со стрелками и работами
- Динамическое связывание
- Динамическое создание и повторное связывание
- Связывание с АТД
- Динамическое связывание и эффективность
- Статическое связывание как оптимизация