Как мне передать аргументы связанным методам? привязка против анонимных методов

#javascript

#javascript

Вопрос:

Я попытался заменить имя метода методом с приведенными ниже аргументами, но это не сработало.

 // just a minimizer method

function m5(a,b)
  {
  return document.getElementById(a).onkeypress=b;
  }

// On page initialization thse methods are bound to text input boxes

m5('signin_pass',bind_enter_key(event,interface_signin));  // this does not work
m5('upload_file',bind_file_upload);
  

Комментарии:

1. Помещение круглых скобок после имени функции немедленно вызывает функцию. Звучит так, как будто вы хотите function.bind .

2. Вы все еще вызываете функцию. Смотрите раздел «примеры» на странице, на которую я ссылался.

3. @ChrisAaker: В частности, посмотрите на пример «каррирования». Здесь показано, как создать функцию с предустановленным аргументом

4. Не могли бы вы показать код для bind_enter_key и bind_file_upload, а также объяснить, что вы на самом деле пытаетесь сделать? Я не думаю, что вам вообще нужна привязка / проксирование функций.

Ответ №1:

Вы можете сделать это следующим образом с помощью анонимной функции, которая вызывает вашу функцию с правильными параметрами:

 // just a minimizer method

function m5(a,b) {
  return document.getElementById(a).onkeypress=b;
}

// On page initialization these methods are bound to text input boxes

m5('signin_pass', function(event) {bind_enter_key(event,interface_signin)});  // this does not work
m5('upload_file', bind_file_upload);
  

Это создает анонимную функцию, которая передается в m5 в качестве функции, и эта анонимная функция вызывает вашу функцию с соответствующими параметрами.

Комментарии:

1. @missingno — предполагая, event что это должно быть событие нажатия клавиши, я добавил это в объявление анонимной функции.

2. Пошел с этим b.c. Я могу понять инструкции для метода bind

Ответ №2:

Что возвращает ваша bind_enter_key функция? Он должен возвращать функцию, поскольку вы назначаете ее onkeypress событию. Если вы хотите вызвать bind_enter_key функцию с предопределенными параметрами при событии нажатия клавиши, тогда вам нужно создать замыкание:

 m5('signin_pass',function(event){
  bind_enter_key(event,interface_signin);
});
  

Просто примечание, я полагаю, что bind_enter_key и interface_signin являются глобальными и доступными в этом пункте.

Ответ №3:

 m5('signin_pass',bind_enter_key(event,interface_signin));  // this does not work
//first argument is a string, works when passed to getElement..
//second argument is the result of a function call bind_enter_key.
//if the function returns something other than a function, the assignment to a handler will fail

m5('upload_file',bind_file_upload);
//second art is a function, as it should be