привязка функции к другой функции в javascript
у меня есть функция в JavaScript
function foo(callback) {
console.log("Hello");
callback();
}
и еще одна функция
function bar() {
console.log("world");
}
и я хочу, чтобы функция FooBar
FooBar = foo.bind(this, bar);
это отлично работает, однако то, что я на самом деле пытаюсь сделать, это создать очередь функция, и часто мне придется связывать параметр функции none перед привязкой обратного вызова, как в следующем примере
function foo() {
console.log(arguments[0]);
var func = arguments[1];
func();
}
function bar() {
console.log("world");
}
foo.bind(this, "hello");
var FooBar = foo.bind(this, bar);
FooBar();
, который производит эта ошибка
[Function: bar]
TypeError: undefined is not a function
как я могу связать функция к другой функции, как только она была привязана к другим типам функций none?
2 ответов
вы связываете "Hello"
to foo
, а затем отдельно обязывающего bar
to foo
а также-вы не должны связывать bar
к результату первого bind
, например:
var FooHello = foo.bind(this, "hello");
var FooBar = FooHello.bind(this, bar);
скрипка здесь. (который регистрирует "Привет", "мир").
метод bind не связывает функции друг с другом, его целью является исправление контекста ключевого слова "this" и любых аргументов при вызове функции. Затем он возвращает новую функцию, оставляя оригинал без изменений.
так: foo.bind(this, "hello")
на самом деле не имеет никакого эффекта. Вызов bind во второй раз создает новую функцию с фиксированным аргументом bar
. Причина, по которой вы получаете ошибку, заключается в том, что передан только один аргумент,arguments[1]
неопределено.
вы смогли сделать как Ричи предлагает добавить промежуточную переменную или просто передать оба аргумента в одной привязке:
var FooBar = foo.bind(this, "hello", bar);
вероятно, неплохо также включить проверку времени выполнения, чтобы ваша функция могла обнаружить, когда она имеет дело с функцией. Это избавит вас от необходимости беспокоиться о порядке аргумента.
if(typeof func === 'function'){
func();
}