2013-04-18 2 views
6

Ich habe diesen Code-Block Ich finde besonders lange und schwer zu verstehen: der Aufruf-Stack ist voll von impliziten Funktionen und Parametern implizit hinzugefügt. mit anderen worten, ich möchte meinen code klarstellen, indem ich die aufgerufene funktion jeweils von den einzelnen trennen.Wenn Sie jQuery .each() verwenden, ist es möglich, eine nicht anonyme Funktion zu verwenden?

dieses Beispiel ein:

$(xml).find('group').each(function() { 
    var groupName = $(this).attr('name'); 
    // There is here around 100 lines of codes I would like to split in 
    // at least five functions, And I'm sure it is possible to use named functions 
    // instead of implicit ones, no ? 

Antwort

4

Versuchen Funktionsreferenz vorbei

Live Demo

$(xml).find('group').each(myfun); 

function myfun(i, item) 
{ 
    alert(item.id); 
} 
+1

Beachten Sie, dass die Callback-Funktion Argumente indexInArray und valueOfElement akzeptiert. Letzteres kann anstelle von $ (this) verwendet werden –

+0

Danke für den Hinweis, überprüfen Sie meine Antwort Ich habe eine Demo hinzugefügt. – Adil

2

Sie könnte auch einfach tun:

$(xml).find('group').each(function(){ 
    yourFunction(); 
}); 
+0

+1. Perfekt saubere Abstraktion genau dort, wo sie gebraucht wird. –

+0

@CarlManaster Ich bitte Sie um Verzeihung? Es gibt hier absolut keine eingeführte Abstraktion ... es sei denn, "yourFunction" verwendet einen anderen Parametersatz als die anonyme Funktion, in diesem Fall kann man auch die Funktion ent-anonymisieren und benennen. – Riduidel

+0

@Riduidel, der Code wurde in eine eigene benannte Funktion extrahiert. Das trennt den Anruf sauber von den unordentlichen Details dessen, was drinnen passiert, so dass dieser Block verständlich wird. Weitere Änderungen können an dem extrahierten Block vorgenommen werden, um ihn lesbarer zu machen, aber dieser Block wird nicht beeinflusst; es ist bereits durch diesen einfachen Abstraktionsschritt sauber gemacht worden: Extract Method. –