1

我正在用 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 函数传递给高阶函数的最佳方法是什么?

4

2 回答 2

3

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

抱歉,如果我不能提供一个实际的解决方案,我不确定你想在这里完成什么。

于 2013-09-25T17:20:51.707 回答
2

我认为你想要做的(我不是 100% 确定)应该是这样的。

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

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

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

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

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

小提琴

于 2013-09-25T17:29:25.120 回答