2013-07-24 4 views
6

Ich habe Code mit einer Zeile geerbt, die ich nicht verstehe.Verwendung von "this" als Funktion?

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

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

Was genau passiert in der .each Funktion? Ich habe noch nie this(var) auf diese Weise verwendet.

+9

change_actions muss ein Array von Funktionen sein. in plain js funktioniert es wie folgt: function apply (v) {return this (v);} [1,2,3] .map (apply, RegExp); – dandavis

+0

Fügen Sie dem Callback-Text 'console.log (this)' oder 'console.dir (this)' hinzu und sehen Sie, worauf sich 'this' bezieht. – fardjad

+0

Die $ .each() -Funktion kann verwendet werden, um über jede Sammlung zu iterieren, ob es ein Objekt oder ein Array ist. Im Falle eines Arrays wird dem Callback jedes Mal ein Array-Index und ein entsprechender Array-Wert übergeben. (Der Wert kann auch über das Schlüsselwort this aufgerufen werden ...) von hier: http://api.jquery.com/jQuery.each/ – svillamayor

Antwort

3

der Autor Setup ihre eigenen Veranstaltungen mit Bindungen, so stehen die Chancen, change_actions Funktionen sind, die ausgeführt werden abonniert, wenn etwas passiert Die Quantität.

versuchen, etwas wie folgt aus:

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

und das Ergebnis:

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

denken Sie daran, wie die click Ereignis und wie Sie Abonnements hinzufügen, indem Sie auf $('element').click() verbindlich. Bei jedem Klick werden alle abonnierten Ereignisse ausgelöst.

5

this Innerhalb der $.each bezieht sich auf die aktuellen Objekte, die Sie durchschleifen.

Das Objekt muss eine Funktion sein, um etwas daran zu übergeben.

3

Sie können auf das folgende Beispiel beziehen:

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/