Maison  >  Article  >  interface Web  >  Conseils d'apprentissage JavaScript : la différence entre appeler et postuler

Conseils d'apprentissage JavaScript : la différence entre appeler et postuler

高洛峰
高洛峰original
2017-01-12 11:35:021447parcourir

1. appeler
appeler la méthode
Appeler une méthode d'un objet pour remplacer l'objet actuel par un autre objet.
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Paramètres
thisObj
Facultatif. L'objet qui sera utilisé comme objet actuel.
arg1, arg2, , argN
Facultatif. Une séquence de paramètres de méthode sera transmise.
Description
La méthode call peut être utilisée pour appeler une méthode à la place d'un autre objet. La méthode d'appel modifie le contexte d'objet d'une fonction du contexte initial au nouvel objet spécifié par thisObj.
Si le paramètre thisObj n'est pas fourni, l'objet Global est utilisé comme thisObj.
Exemple simple (appel de fonction) :

function add(a,b) 
{ 
alert(a+b); 
} 
function sub(a,b) 
{ 
alert(a-b); 
} 
add.call(sub,3,1);

Ce que cet exemple signifie est de remplacer sub par add, add.call(sub,3,1) == add(3,1) , donc le résultat en cours d'exécution est : alert(4); Un exemple plus compliqué (appel de méthode) :

function Class1() 
{ 
this.name = "class1"; 
this.showNam = function() 
{ 
alert(this.name); 
} 
} 
function Class2() 
{ 
this.name = "class2"; 
} 
var c1 = new Class1(); 
var c2 = new Class2(); 
c1.showNam.call(c2);

Notez que l'appel signifie mettre la méthode de c1 sur c2 pour l'exécution. avez la méthode showNam. (), placez maintenant la méthode showNam() de c1 sur c2 pour l'exécution, donc this.name devrait être class2, et le résultat de l'exécution est : alert ("class2"); >

De cette façon, Class2 hérite de Class1.call(this) signifie utiliser l'objet Class1 au lieu de cet objet. Ensuite, Class2 n'a pas toutes les propriétés et méthodes de Class1. les méthodes de Class1. Et les attributs, le résultat de l'exécution est : alert ("cc");
function Class1() 
{ 
this.showTxt = function(txt) 
{ 
alert(txt); 
} 
} 
function Class2() 
{ 
Class1.call(this); 
} 
var c2 = new Class2(); 
c2.showTxt("cc");
Oui, c'est ainsi que javaScript simule l'héritage en mode objet, et peut également implémenter l'héritage multiple.


Héritage multiple

C'est très simple, il suffit d'utiliser deux appels pour obtenir un héritage multiple
function Class10() 
{ 
this.showSub = function(a,b) 
{ 
alert(a-b); 
} 
} 
function Class11() 
{ 
this.showAdd = function(a,b) 
{ 
alert(a+b); 
} 
} 

function Class2() 
{ 
Class10.call(this); 
Class11.call(this); 
}
Bien sûr, il existe d'autres façons d'hériter de js, comme utiliser la chaîne de prototypes, cela n'appartient pas. La portée de cet article est simplement d'expliquer l'utilisation de call.

J'ai mentionné call, et bien sûr, ces deux méthodes signifient fondamentalement la même chose
La différence est que le deuxième paramètre de. call peut être de n'importe quel type et apply Le deuxième paramètre doit être un tableau

2 apply

a la même fonction pour apply et call, mais il existe des différences de paramètres entre les deux.
Le premier paramètre a la même signification, mais pour le deuxième paramètre :
appliquer les passes dans un tableau de paramètres, c'est-à-dire que plusieurs paramètres sont combinés dans un tableau et transmis, et l'appel est utilisé comme appel. transmis (en commençant par le deuxième paramètre).
Par exemple, la méthode d'écriture d'application correspondante de func.call(func1,var1,var2,var3) est : func.apply(func1,[var1,var2,var3])

Tips (le code est élégant et son efficacité d'exécution élevée)

Pour plus de conseils d'apprentissage JavaScript sur les différences entre appeler et postuler, veuillez faire attention au site Web PHP chinois !
alert(Math.max(5,8)) //8 
alert(Math.max(5,7,9,3,1,6)) //9 

var arr=[5,7,9,1] 
alert(Math.max.apply(null,arr));
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