Dodwin: Funktion mit dynamischer Anzahl an Parameter aufrufen

Beitrag lesen

Hallo molily,

Ok, nach mehrfachem Durchlesen hab ich's jetzt halbwegs verstanden.

In deinem Beispiel ermöglicht das Currying, dass man der Funktionsreferenz auch später noch Parameter anhängen kann, wenn ich das richtig verstanden habe.

Bei dieser Standard-Currying-Funktion wird der Parameter response hinten drangehangen - man könnte ihn auch vorne anhängen (statt concat die arguments-Liste von hinten durchlaufen und alle Elemente mit unshift in args einfügen).

In der curry-Funktion habe ich lediglich die innere return-Zeile geändert:
return func.apply(this, slice.apply(arguments).concat(args));
Das bewirkte schon das gezielte Ergebnis.

Die Ajax-Funktion sieht jetzt so aus:

function ajax(file, func_target) {  
  var tmp_ajax_obj = (window.XMLHttpRequest) ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');  
  tmp_ajax_obj.open('post', file);     // post => no browser-cache  
  if (func_target)  
    tmp_ajax_obj.onreadystatechange = function(){  
      if(tmp_ajax_obj.readyState == 4)  
        func_target(tmp_ajax_obj.responseText); // Aufruf der Ziel-Funktion  
    }  
  tmp_ajax_obj.send(null);  
}  

Damit kann ajax() sowohl mit ajax('test.txt',handler.curry(1, 2, 3)) als auch mit

ajax('test.txt', function (resp) {  
  var a = 1, b =2, c = 3;  
  // ...  
});

aufgerufen werden.

Gruß,
Dodwin

--
Dodwin