Comment fonctionne 'call' en javascript?

J'ai une question sur 'appel' en javascript.

var humanWithHand = function(){ this.raiseHand = function(){ alert("raise hand"); } } var humanWithFoot = function(){ this.raiseFoot = function(){ alert("raise foot"); } } var human = function(){ humanWithHand.call( this ); humanWithFoot.call( this ); } var test = new human(); 

Alors … quand j'utilise 'appel' comme humanWithHand.call (ceci), qu'est-ce qui se passe en interne?

HumanWithHand a-t-il des copies variables (ou des points?) Ses propriétés et ses membres sur le prototype de la variable humaine?

    .call() définit la valeur de valeur, puis appelle la fonction avec les arguments que vous avez passés à .call() . Vous utilisez .call() au lieu de simplement appeler la fonction directement lorsque vous souhaitez définir la valeur de this valeur dans la fonction appelée plutôt que de la laisser configurer sur n'importe quel javascript normalement.

    .apply() est une fonction soeur. Il peut également définir la valeur de this valeur et peut prendre des arguments dans un tableau afin qu'il puisse être utilisé lorsque vous essayez de passer une liste d'arguments variables à partir d'un autre appel de fonction ou lorsque vous construisez une liste d'arguments par programme qui peut avoir des nombres différents Des arguments en fonction de la situation.

    Yehuda Katz a une bonne écriture de la méthode d' Function#call JavaScript. Son écriture devrait répondre à votre question, et de nombreuses questions de suivi en plus.

    Lorsque vous appelez directement une fonction, utilisez la syntaxe générale:

     var foo = function() { console.log("foo"); return this; }; foo(); // evaluates to `window` 

    Ensuite, this dans l'appel de fonction est this que this est en dehors de l'appel de fonction. Par défaut, dans le navigateur, this dehors des appels de fonction est une window . Donc, dans l'appel de fonction comme ci-dessus, c'est également par défaut.

    Lorsque vous appelez une fonction en utilisant la syntaxe méthode-appel:

     var bar = { foo: function() { console.log("foo"); return this; } }; bar.foo(); // evaluates to `bar` 

    Ensuite, this dans l'appel de fonction est l'objet à gauche de la période la plus à droite: dans ce cas, bar .

    Nous pouvons simuler cette situation en utilisant un call .

    Lorsque vous configurez une fonction en dehors d'un objet et que vous souhaitez l'appeler à l'intérieur de l'appel de fonction configuré sur un objet, vous pouvez:

     var foo = function() { console.log("foo"); return this; } var bar = { }; foo.call(bar); // evaluates to `bar` 

    Vous pouvez également utiliser cette technique pour réussir les arguments:

     var foo = function(arg1, arg2) { console.log("foo"); return arg1 + arg2; } var bar = { }; foo.call(bar, "abc", "xyz"); // evaluates to `"abcxyz"`