2016-05-19 10 views
1

Ich versuche, eine Funktion zu schreiben, die Funktionen als Argumente (so viele wie es geht) und gibt sie zurück. Die Funktion funcArg sollte 'Called me' zurückgeben. Ich habe Array.prototype.slice.call (Argumente) verwendet; um ein Array zu erstellen, aber ich weiß nicht, wie ich die Funktionen in diesem Array aufrufen soll. Irgendwelche Ideen? Vielen Dank!!Aufruf Funktionen Einblick Funktion/Argumente

var caller = function() { 
    return "Called "; 
}; 
var adder = function() { 
    return " me"; 
}; 
var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 
} 
funcArgs(caller); 
funcArgs(calleradder); 

Antwort

1

Wenn Sie eine Reihe von Funktionen haben Sie Schleife über sie können mit forEach.

var caller = function() { 
    return "Called " 
} 

var adder = function() { 
    return " me" 
} 

var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 
    myArray.forEach(function (fn) { 
    console.log(fn()) 
    }) 
} 

funcArgs(caller, adder); // "Called me" 

Wenn Sie möchten, um tatsächlich die Werte zurück, anstatt sie nur console.log, können Sie reduce verwenden, um die Strings verkettet (oder was auch immer)

var funcArgs = function() { 
    var myArray = Array.prototype.slice.call(arguments); 

    return myArray.reduce(function (acc, fn) { 
    return acc + fn() 
    }, '') 
} 
+0

vielen Dank !! Weißt du, wie ich hier die concat-Methode auf die Argumente anwenden würde? – learningcoding

+0

Was möchten Sie mit 'concat' machen? Was ist das gewünschte Ergebnis? – azium

+0

"Called" und "me", die zurückgegeben werden, sollen in einer Zeile sein, wie Called mich im Gegensatz zu in separaten Zeilen sein – learningcoding

2

Sie zurückkehren können dies tun, indem reduce.

var funcArgs = function() { 
    var functions = Array.prototype.slice.call(arguments); 
    return functions.reduce(function(total, f) { 
    return total + f(); 
    }, ''); 
}; 

Die Art, wie dies funktioniert, wenn Sie mit einer Reihe von Funktionen beginnen. Wir gehen dann jede Funktion nacheinander durch. Wir rufen diese Funktion dann auf und hängen sie an das Ergebnis der vorherigen Funktion an. Breaking dies in einfacheren Code würde wie folgt aussehen:

var funcArgs = function() { 
    var functions = [caller, adder]; 
    var result = ''; 
    result += functions[0](); // caller(); 
    result += functions[1](); // adder(); 
    return result; 
}; 
+0

Vielen Dank! Diese (letzte) Lösung würde jedoch nur funktionieren, wenn ich wüsste, wie viele Argumente ich haben werde. – learningcoding

+1

@learningcoding es ist keine Lösung, er erklärt, wie die erste Methode genauer funktioniert. – azium

+1

@learningcoding Der letzte ist kein a Lösung. Es ist eine Erklärung dessen, was beim Aufruf von 'funcArgs (Aufrufer, Addierer) 'passiert. Wenn man Code wie diesen schreibt, ist es wichtig zu verstehen, wie es funktioniert. –