将jQuery函数传递给高阶函数

时间:2013-09-25 17:11:51

标签: javascript jquery

我正在尝试Javascript中的高阶函数,我写了这样的东西:

function hof (setter) {
    setter("not test");
}

function hof2 (setter) {
    setter.call(window.jQuery, "not test 2");
}

var span = $("#myTest").text;
hof(span);
hof2(span);

这是jsFiddle版本:http://jsfiddle.net/6mcYt/

但是,这两个函数都会抛出错误。将jQuery setter函数传递给更高阶函数的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

text函数实际上属于jQuery.fn(也分配给jQuery构造函数的prototype属性)。如果将其作为第一个参数传递给setter.call,它将停止抛出错误。但是如果所需的结果正在更改#myTest上的文字,它将无效,因为您将不再对该元素进行任何引用(您将其保留在$("#myTest")上,这是一个 jQuery构造函数的实例

很抱歉,如果我无法提供实际的解决方案,我不确定你要在这里完成什么。

答案 1 :(得分:2)

我认为你想做的事情(我不是100%肯定)应该是这样的。

function hof ($el) {
    $.fn.text.call($el, 'test1')
}

var span = $("#myTest");
hof(span);

这里是小提琴http://jsfiddle.net/6mcYt/2/

另一种选择是首先将文本方法与上下文绑定。

function hof2 (setter) {
    setter("not test 2");
}
var spanFn = $.proxy($.fn.text, $("#myTest"));
hof2(spanFn);

Fiddle