2013-07-24 15 views
6

Odziedziczyłem kod z linią, której nie rozumiem.Użycie "tego" jako funkcji?

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

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

Co dokładnie dzieje się wewnątrz funkcji .each? Nigdy wcześniej nie widziałem, jak używa się tej metody.

+9

change_actions musi być tablicą funkcji. w zwykłym js działa tak: funkcja apply (v) {return this (v);} [1,2,3] .map (apply, RegExp); – dandavis

+0

Dodaj 'console.log (this)' lub 'console.dir (this)' do treści wywołania zwrotnego i zobacz, do czego odnosi się to "this". – fardjad

+0

Funkcja $ .each() może być użyta do iteracji w dowolnej kolekcji, niezależnie od tego, czy jest to obiekt czy tablica. W przypadku tablicy wywołanie zwrotne przekazuje za każdym razem indeks tablicy i odpowiadającą jej wartość tablicy. (Dostęp do tej wartości można również uzyskać za pomocą tego słowa kluczowego ...) stąd: http://api.jquery.com/jQuery.each/ – svillamayor

Odpowiedz

3

konfiguracja autor własnych imprez z wiązaniami, więc są szanse change_actions są funkcjami, które są subskrybowane do uruchomienia, gdy coś się dzieje ilość.

spróbować czegoś takiego:

// 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); 
}); 

a wynik:

// 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 

myśleć o tym, jak zdarzenia click i jak można dodać subskrypcji poprzez wiązanie się $('element').click(). za każdym razem, gdy następuje kliknięcie, wszystkie subskrybowane zdarzenia są wyzwalane.

5

wewnątrz $.each odnosi się do bieżących obiektów, przez które przechodzisz.

Obiekt musi być funkcją, aby coś do niego przekazać.

3

można odnosić się do następującego przykładu:

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/

Powiązane problemy