Jetons d'abord un coup d'œil à l'explication officielle sur Call (), «Appelant une méthode d'un objet et remplaçant l'objet actuel par un autre objet». Après avoir lu cette explication, vous pouvez être encore plus confus. Voir l'exemple:
La copie de code est la suivante:
var x = "Je suis une variable globale"; // définir la variable globale x
fonction a () {// définir la structure de la classe de fonction a
this.x = "Je l'ai déclaré dans la structure de la classe de fonction a";
}
// Définissez une fonction normale et faites apparaître la valeur de la variable x contenue dans le pointeur actuel.
fonction f () {
alerte (this.x);
}
// La valeur de retour est "J'ai déclaré dans la structure de la classe de fonction A"
F.Call (new A ());
Ma compréhension est que F.Call (new A ()) est de copier la fonction (en fait un objet) F à l'objet appelé "nouveau a ()" pour l'analyse. En fait, c'est la même chose que le résultat d'analyse du code suivant:
La copie de code est la suivante:
fonction a () {
this.x = "Je l'ai déclaré dans la structure de la classe de fonction a";
alerte (this.x);
}
un();
C’est juste que la portée de la variable X est différente pour le moment. Oui ... il semble avoir un peu d'héritage, n'est-ce pas? Dans l'exemple ci-dessus, F est complètement hérité par l'objet de force du constructeur a. Si cela ne suffit pas pour montrer que A.Call (b) est un mode d'héritage, regardons une utilisation plus héritée.
La copie de code est la suivante:
fonction f () {
this.a = "a";
this.b = function () {
alerte ("b");
}
}
fonction e () {
F.Call (ceci);
}
var c = new e ();
alerte (CA); // popt a
CB (); // popt b
Dans cet exemple, tant que des amis qui savent utiliser le navigateur, ils peuvent voir que E hérite complètement des propriétés et des méthodes de F, sinon elle ne sera pas expliquée, car les attributs A et B ne sont pas définis dans E. Ensuite, selon Common Sense, ces deux propriétés n'apparaîtront pas dans l'objet d'instance C de E.