Maison  >  Article  >  interface Web  >  Explication détaillée des exemples d'utilisation d'applications et d'appels de javascript modifiant le point interne du corps de la fonction

Explication détaillée des exemples d'utilisation d'applications et d'appels de javascript modifiant le point interne du corps de la fonction

伊谢尔伦
伊谢尔伦original
2017-07-20 14:20:541394parcourir

appeler et appliquer existent tous deux pour changer le contexte lorsqu'une fonction est en cours d'exécution, Changer. le pointeur de ceci à l'intérieur du corps de la fonction .

call et apply ont exactement la même fonction, mais la façon dont ils acceptent les paramètres est différente.

Définition de la méthode
apply
La méthode Function.apply(obj,args) peut recevoir deux paramètres :

obj : Cet objet remplacera cet objet dans la classe Function

args : Il s'agit d'un tableau ou de type tableau, et la méthode apply prend le éléments de cette collection Passé en paramètre à la fonction appelée.

call

Le premier paramètre de la méthode call est le même que le premier paramètre de la apply méthode , sauf que le deuxième paramètre est une liste de paramètres

En mode non strict, lorsque le premier paramètre est passé comme nul ou indéfini, celui-ci dans le corps de la fonction pointera vers l'objet hôte par défaut, dans le navigateur C'est la méthode de "piratage" des autres


À ce moment, la méthode
var test = function(){
  console.log(this===window);
}
test.apply(null);//true
test.call(undefined);//true
logName

dans foo sera référencée par bar , et
ce

pointe vers

bar

Mise en œuvre de l'héritage


Dans le développement réel, nous rencontrons souvent des scénarios dans lesquels ce pointeur est modifié par inadvertance.

a une méthode
var foo = {
  name:"mingming",
  logName:function(){
    console.log(this.name);
  }
}
var bar={
  name:"xiaowang"
};
foo.logName.call(bar);//xiaowang
fun

locale Lorsque fun est appelé comme une fonction normale, le
this

interne de

fun
pointe vers <.>window

, mais on souhaite souvent qu'il pointe vers le nœud
function Animal(name){   
  this.name = name;   
  this.showName = function(){   
    console.log(this.name);   
  }   
}   

function Cat(name){  
  Animal.call(this, name);  
}   

var cat = new Cat("Black Cat");   
cat.showName(); //Black Cat
#test

, voir le code suivant :
Utiliser appeler, postulerNous pouvons facilement résoudre ce problème

Bien sûr, vous pouvez également le faire, mais dans

ECMAScript 5strict

de 🎜>, celui-ci a été stipulé dans ce cas non pas pour pointer vers l'objet global, mais pour être
window.id="window";
document.querySelector(&#39;#test&#39;).onclick = function(){
  console.log(this.id);//test
  var fun = function(){
    console.log(this.id);
  }
  fun();//window
}
indéfini :


window.id="window";
document.querySelector(&#39;#test&#39;).onclick = function(){
  console.log(this.id);//test
  var fun = function(){
    console.log(this.id);
  }
  fun.call(this);//test
}

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn