Function.prototype.call()
La méthode d'appel d'une instance de fonction peut spécifier le pointeur de this à l'intérieur de la fonction (c'est-à-dire la portée dans laquelle le la fonction est exécutée), puis appelez la fonction dans la portée spécifiée. Et la fonction sera exécutée immédiatement.
Regardez un exemple pour comprendre ce passage.
var keith = { rascal: 123 }; var rascal = 456; function a() { console.log(this.rascal); } a(); //456 a.call(); //456 a.call(null); //456 a.call(undefined); //456 a.call(this); //456 a.call(keith); //123
Dans le code ci-dessus, si le mot-clé this dans la fonction a pointe vers l'objet global, le résultat renvoyé est 456. On voit que si la méthode d'appel n'a pas de paramètres, ou si les paramètres sont nuls ou indéfinis ou ceci, cela équivaut à pointer vers l'objet global. Si vous utilisez la méthode call pour pointer le mot-clé this vers l'objet Keith, c'est-à-dire que la portée dans laquelle la fonction est exécutée est l'objet Keith, le résultat renvoyé est 123.
La méthode call() peut transmettre deux paramètres. Le premier paramètre spécifie le pointeur de ceci à l'intérieur de la fonction (c'est-à-dire la portée dans laquelle la fonction est exécutée), et le deuxième paramètre est le paramètre qui doit être transmis lorsque la fonction est appelée.
function keith(a, b) { console.log(a + b); } keith.call(null, 1, 2); //3
Le premier paramètre est obligatoire et peut être nul, indéfini, ceci, mais ne peut pas être vide. Défini sur null, non défini, cela indique que la fonction Keith est actuellement dans la portée globale. Le deuxième paramètre doit être ajouté un par un. Lors de l'application, il doit être ajouté sous la forme d'un tableau.
Une application de la méthode call consiste à appeler la méthode native de l'objet. Peut également être utilisé pour convertir des objets de type tableau en tableaux.
var obj = {}; console.log(obj.hasOwnProperty('toString')); //false obj.hasOwnProperty = function() { return true; } console.log(obj.hasOwnProperty('toString')); //true console.log(Object.prototype.hasOwnProperty.call(obj, 'toString')); //false
Dans le code ci-dessus, hasOwnProperty est une méthode héritée par l'objet obj. Si cette méthode est remplacée, le résultat correct ne sera pas obtenu. La méthode call peut résoudre ce problème. Elle place la définition originale de la méthode hasOwnProperty sur l'objet obj pour l'exécution, de sorte que peu importe s'il existe ou non une méthode du même nom sur obj, cela n'affectera pas le résultat. Il convient de noter que hasOwnProperty est une méthode de l'objet natif d'Object.prototype et que call est une méthode héritée de Function.prototype.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!