2017-10-09 2 views
0

Ich erstelle ein Problem zu verstehen, wie Funktion Argumente Objekt analysieren.Javascript Argumente Objekt Parameter Analyse

Der Code, den ich Analyse:

function foo(something) { 
    console.log(something); // outputs 3 
    return this.a + something; 
} 

function bind(fn, obj) { 
    return function() { 
     return fn.apply(obj, arguments); 
    }; 
} 

var obj = { 
    a: 2 
}; 

var bar = bind(foo, obj); 
var b = bar(3, 5, 6); 

Die Funktion foo Konsole protokolliert seine Argumente mit dem Namen „etwas“, das Objekt sein sollten Argumente. Warum bekomme ich nur den ersten Param und andere Params werden ignoriert? Ich dachte, ich sollte das ganze Argument Objekt bekommen.

Antwort

0

Mit .apply() übergeben Sie alle Parameter als Array. Das bedeutet, wenn Sie eine Funktion mit zwei Parametern wie haben:

functionWithTwo(a,b) {} 

Sie die Parameter mit einem Array mit zwei Werten passieren können:

[1,3] 

Wenn Sie nun ein Array mit mehr als 2 Feldern passieren Die anderen werden ignoriert, da Ihre Zielfunktion nur zwei Argumente akzeptiert.

Dies ist genau das, was in Ihrem Beispiel passiert. Sie übergeben ein Array [3, 5, 6] an eine Funktion, die nur 1 Parameter (etwas) akzeptiert. Es ist also nur der erste Wert, 3, vorhanden.

+0

Ich übergebe ein Array (nebenbei, Art der Argumente Parameter ist Objekt) [3, 5, 6] und die erste erhält sein erstes Element. Warum? Für mich sieht es jetzt aus, dass ich eine Funktion habe, die ihre Argumente falsch ausgibt. Zum Beispiel: 'Funktionstest (arg) { console.log (arg); } Test ([1,2,3]) // Ausgänge [1,2,3] ' aber ich bekomme etwas wie folgt: ' test ([1,2,3]) // [1] ' – tawreon

+0

Image, dass .apply() ein gegebenes Array einem Funktionsargument zuordnet. Es läuft sozusagen über alle Elemente des gegebenen Arrays und bildet jede Übereinstimmung ab. Sie haben nur eine Übereinstimmung für Argumente [0], weil foo nur einen Parameter hat – scipper