2017-03-10 1 views
0

Wenn ich die Funktion addToThis Aufforderung und den obj der console.log (a) gibt den ersten Arrayindexwert übergeben, der 1 anstelle dem obj ist, warum?gebene Objekt nicht als der erste Parameter der Funktion in JavaScript behandelt

var obj = {num:2}; 

var addToThis = function(a,b){ 
    console.log(a); 
    return this.num + a + b; 
}; 

var arr = [1,2,3]; 
console.log(addToThis.apply(obj,arr)); 
+0

'apply' sendet den Inhalt des Arrays als einzelne Argumente - so' a' wird auf '1' gesetzt werden, und 'b' auf '2'. Was erwartest du zu passieren? – Shadow

Antwort

0

See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

Wenn Sie apply() verwenden, das erste Argument ist das this Argument, und das zweite Argument ist ein Array von Argumenten an die Funktion übergeben werden. In Ihrem Fall ist a-1 kartiert und b auf 2 abgebildet. Wenn Sie ein drittes Argument hinzuzufügen sind, c, wäre es zu 3 abgebildet werden.

Einfacher gesagt, das erste Argument in apply() ist genau was this in Ihrer Funktion beziehen wird. Das zweite Argument ist ein Array von Argumenten, die an die Funktion übergeben werden.

Wenn Sie hinzufügen waren console.log(this) Sie Ihr Objekt sehen würde.

var obj = {num:2}; 
 

 
var addToThis = function(a,b){ 
 
    console.log(a); 
 
    console.log(this); 
 
    return this.num + a + b; 
 
}; 
 

 
var arr = [1,2,3]; 
 
console.log(addToThis.apply(obj,arr));

0

Ich werde versuchen, es aus zu erklären, was ich verstehe. Die Syntax für die Verwendung von "apply" lautet:

Hier gibt thisArg den Kontext an, der auf die Funktion angewendet wird. (ZB, das). [argsArray] ist das Array von Argumenten für die Funktion.

Wenn Sie dies tun:

addToThis.apply(obj,arr) 

Sie vorbei im Grunde arr=[1,2,3] als Argumente an Ihre addToThis Funktion. Somit wird a 1, b wird 2, wenn Sie ein c in Ihrer Funktionsdefinition haben, die so auf 3..and werden würde, bis sie die Länge Ihres Array erreicht.

Siehe this Geige, hier console.log(c) druckt das dritte Element in Ihrem Array. Aber, wenn Sie diesen Code geschrieben:

var obj = {num:2}; 

var addToThis = function(a,b,c,d){ 
    console.log(a); //prints first element in array 
    console.log(b); //prints second element 
    console.log(c); //prints third element 
    console.log(d); //prints undefined because there is no forth element 
}; 

var arr = [1,2,3]; 
addToThis.apply(obj,arr); 

Hoffnung, das hilft.

Verwandte Themen