2015-03-06 2 views
1

Я хочу создать функцию, которая принимает одну функцию как параметр (другую функцию) и возвращает функцию, принимающую аргументы, которые будут применяться к первому.Как передать функцию jQuery как аргумент другой функции?

Это монадическая идея, как это:

function creator(fun) { 
    return function (arg) { 
     fun(arg); 
    }; 
} 

$(function() { 
    var printer = creator(alert); 
    printer("foo bar"); 
}) 

Проблема заключается в том, что я не могу Google или выяснить, как сделать то же самое с функциями JQuery:

function show_and_change(fun) { 
    return function (el, attr, value) { 
     console.log(el.fun(attr) 
     el.fun(attr, value); 
    } 
} 

$(function() { 
    var my_mod = show_and_change($.fn.attr); 
    my_mod($("#one"), "foo", "bar2"); 
}) 

ответ

1

el.fun буквально попробовать доступ к собственности fun на el (которого нет). Вместо этого вы хотите позвонить fun (как вы это делали в первом примере), но и установить его значение this для объекта JQuery:

fun.call(el, attr, value); 

Узнайте больше о .call и .apply.

+0

Это точный код. –

Смежные вопросы