2013-09-25 185 views
1

我與高階函數試驗在Javascript中,我寫了這樣的事情:傳遞jQuery的功能,高階函數

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

以下的答案你可能感興趣的http://stackoverflow.com/questions/18907888/how-to-wrap-the-jquery-function/18908560#18908560 – plalx

回答

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

+1

有什麼要說的,你可以在'hof'裏面'返回$ el.text('test1')'。 – plalx

+0

是的,這是毫無意義的。第二種方法更接近OP的問題。 – Ehtesham

+0

第二種方法正是我正在尋找的,因爲hof2仍然不知道它傳遞了什麼樣的函數(即可能是jQuery)。 – augustocorvalan

3

text函數實際上屬於jQuery.fn(它也被分配給jQuery構造函數的prototype屬性)。如果你將其作爲第一個參數傳遞給setter.call,它將停止拋出錯誤。但如果期望的結果正在改變#myTest上的文本,因爲您不再有任何對該元素的引用(您在$("#myTest"),這是jQuery構造函數的實例)。

對不起,如果我不能提供實際的解決方案,我不知道你在這裏試圖完成什麼。

+0

+1 - 我同意。當傳遞原型函數的指針時,myTest jQuery對象沒有上下文。 –