2014-02-14 99 views
3

看來,你不能用jQuery做到這一點:爲什麼不能存儲jQuery方法?

f = $("#someElement").text 
f("Bar!") 

在Chrome它給了我這個錯誤:「類型錯誤:[對象反對全球]有沒有方法‘空’」

這是爲什麼?

http://jsfiddle.net/bdN4z/

+2

'this'取決於你如何調用一個函數。這是底線。 – elclanrs

+2

http://jsfiddle.net/bdN4z/1/ – elclanrs

+1

因爲函數的執行上下文會有所不同 –

回答

4

text功能使得使用在內部的this值。

this的值取決於您如何調用該函數。

當你調用$("#someElement").text(),你是jQuery中的一個實例的情況下調用它。 jQuery實例有一個empty方法。

當您撥打f()時,您在默認對象(window)的上下文中調用它。 window沒有empty方法。

+0

我明白了。但是,當我嘗試通過傳遞文本函數作爲結果從ajax調用回調來嘗試變得聰明時,我遇到了這種情況: – monoceres

2

您需要提供的方法,才能正常運作情況下...

這個怎麼樣?

someElement = $("#someElement"); 
f = someElement.text.bind(someElement); 
f("Bar!") 
+0

或'f = $ .fn.text.bind(someElement);'或者jQuery :'f = $ .proxy($。fn.text,someElement);' –

+0

這種做法失敗了,我試圖通過將文本函數作爲回調來實現,簡單的解決方案是少一點聰明並將其傳遞給閉包:) – monoceres

+0

@monoceres但你可以在回調方法上設置上下文,那麼你的問題是什麼呢? –

相關問題