2011-09-30 5 views
2

Existe-t-il un moyen simple de passer tous les arguments d'une fonction à une autre et d'envoyer this également.Différence entre .call et .apply

J'ai essayé: http://jsfiddle.net/v92Xr/

var f1 = function() { 
    f2.call(this, arguments); 
}; 
var f2 = function() { 
    console.log(arguments); 
}; 
f1("abc", "def", "hij"); 

mais il me laisse tous les arguments de f1 est empilé dans les arguments f2 0:

f2->arguments[0] == f1->arguments 

Ok et quand je lance la méthode apply à la place qu'il travaux: http://jsfiddle.net/v92Xr/1/

var f1 = function() { 
    f2.apply(this, arguments); 
}; 
var f2 = function() { 
    console.log(arguments); 
}; 
f1("abc", "def", "hij"); 

s'il vous plaît dites-moi quelle est la différence entre call et apply est?

Répondre

4

Je pense que vous venez de découvrir la différence vous-même.

call est presque identique à la façon dont vous appelleriez normalement une fonction, sauf qu'il y a un paramètre supplémentaire au début de la liste des paramètres où vous placez la référence pour l'objet this.

apply a également le premier paramètre en tant qu'objet this mais le deuxième paramètre devrait être un tableau. Ce tableau est utilisé pour fournir tous les arguments attendus par la fonction appelée. L'élément 0 correspond au premier argument de la liste d'arguments de fonctions, l'élément 1 à la seconde et ainsi de suite.

Questions connexes