2013-07-24 77 views
6

我繼承了一些我不明白的代碼。使用「this」作爲函數?

function updateQty() { 
     obj.find('.inputAmount').html(qty); 
     input.val(qty); 

     $.each(change_actions, function() { 
      this(qty); 
     }); 
    } 

究竟是什麼.each函數內部發生了什麼?我以前從未見過this(var)這種方式。

+9

change_actions必須是函數數組。以純JS,它的工作原理是:函數應用於(V){返回這個(V);} [1,2,3] .MAP(申請,正則表達式); – dandavis

+0

添加'的console.log(本)'或'console.dir(這)'回調身體,看看是什麼'this'指。 – fardjad

+0

的$。每個()函數可以被用於任何集合遍歷,無論是一個對象或一個數組。在數組的情況下,每次回調都會傳遞一個數組索引和相應的數組值。 (該值也可以通過此關鍵字...)從這裏:http://api.jquery.com/jQuery.each/ – svillamayor

回答

3

筆者建立自己的事件綁定的,所以機會是change_actions是訂閱當有事運行功能數量。

嘗試這樣:

// initialize with a value 
var actions = [ 
    function(x){ console.log('I see a new x: ' + x); } 
]; 

// add actions "later" 
actions.push(function(x){ console.log('Yup, a new x: ' + x); }); 

// Then execute them: 
$.each(actions, function(){ 
    this(4); 
}); 

// add another one still 
actions.push(function(x){ console.log(x + ' looks new'); }); 

// re-iterate over them 
// Then execute them: 
$.each(actions, function(){ 
    this(5); 
}); 

和結果:

// first iteration (only 2 subscribed events) 
[15:56:50.030] "I see a new x: 4" 
[15:56:50.030] "Yup, a new x: 4" 

// second iteration (now we have 3, one was added later) 
[15:56:50.030] "I see a new x: 5" 
[15:56:50.030] "Yup, a new x: 5" 
[15:56:50.030] "5 looks new" // <-- new subscription 

把它想的click事件以及如何通過結合$('element').click()添加訂閱。每次點擊發生時,都會觸發任何訂閱的事件。

5

this$.each內指的是你是通過循環當前對象。

的對象必須是爲了傳遞東西它的功能。

3

您可以與下面的例子:

var change_actions = [ 
    function(x) { alert(x + 1); }, 
    function(x) { alert(x + 2); } 
]; 

var qty = 5; 
$.each(change_actions, function() { 
    this(qty); 
}); 

的jsfiddle:http://jsfiddle.net/fuyz2/