2012-05-13 51 views
3

對不起初學者的問題,但是我很難把這個問題包裹起來。使用jQuery我可以做這樣的事情:將函數應用於javascript中的對象

$.each(array, testF); 

function testF(){ 
    console.log(this.name); 
} 

使用$。每次我可以通過數組的功能testF,並訪問包含在數組中的每一行中的對象。但是,當我嘗試做這樣的事情:

array[0].testF() 

我收到一個錯誤,指出該對象沒有方法'testF'。我想知道是否有人可以解釋這裏發生了什麼...爲什麼jQuery一個工作,但第二個沒有。再次,請原諒初學者問題。

回答

4
  • $.each(array, testF)用於與this陣列結合到elem中的每個元素調用testF(i, elem)
  • array[0].testF()試圖調用上array[0]

存在什麼$.each()所做的相當於是testF.call(array[0], 0, array[0])或因爲你不使用的參數,你可以SIMPL做testF.call(array[0])

的文檔見MDN的方法testF().call()

+0

jQuery如何將'this'綁定到'testF'? –

+2

它使用['.call()'](https://developer.mozilla。組織/ EN/JavaScript的/參考/ Global_Objects /功能/電話); JavaScript中的每個函數都有一個方法。以下是從jQuery源代碼複製的語句:'callback.call(object [i],i,object [i ++])' – ThiefMaster

+0

哇,今天剛剛學到了一件新事物! –

2

做它像這樣:

testF.call(array[0]); 

call功能的方法,可以設置函數調用的上下文(this值)。因此,無論何時您想使用自定義上下文調用函數,而不是fn();,請執行fn.call(context);

+0

+1 bravoŠime! –

1

這是因爲對象數組[0]沒有函數testF, 您需要首先聲明該函數。 像這樣:

array[0].testF = function testF() 
{ 
    console.log(this.name); 
} 

array[0].testF(); 
1

當你寫array[0].testF(),這意味着:

  • 查找變量array
  • 就拿元素的索引下"0"
  • ,取索引下的元素"testF"
  • 一個ð執行它作爲一個功能(也分配該特殊變量thisarray[0]

然而,在大多數情況下,array[0]不會有定義的屬性testF。如果你預先這樣做:

array[0].testF = testF; 

然後它會工作。

+0

我會用「查找該元素的屬性」testF「替換#3」。 – ThiefMaster

+0

@ThiefMaster:夠公平的;即使JavaScript中的數組只是特殊的對象,數字屬性名稱,所以我的意思是顯示等價。 – Amadan

+0

我欣賞一步一步的解釋。謝謝。 – bento

相關問題