我正在尝试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函数传递给更高阶函数的最佳方法是什么?
答案 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);