Si vous n'avez jamais été exposé à des langages dynamiques, cela vous semblera magique et étrange de comprendre JavaScript avec la façon de penser des langages compilés, car des choses qui sont consciemment impossibles se produisent souvent, et semblent même déraisonnables si vous apprenez quand. vous rencontrez ce sentiment dans le processus de JavaScript, un langage libre et en constante évolution, alors à partir de maintenant, s'il vous plaît, déposez vos « préjugés », car c'est définitivement un nouveau continent pour vous. Bon, ne vous parlons plus. Revenons aux choses sérieuses. Laissez-moi d'abord vous expliquer les définitions des méthodes apply et call.
Le contenu spécifique est le suivant :
1. Définition de la méthode
call et apply appartiennent tous deux à une méthode de Function.prototype, qui est implémentée en interne par le moteur JavaScript. Parce qu'elle appartient à Function.prototype, chaque instance d'objet Function, c'est-à-dire que chaque méthode a des attributs d'appel et d'application. comme Attributs des méthodes, alors leur utilisation est bien sûr spécifique aux méthodes. Ces deux méthodes sont faciles à confondre car elles ont la même fonction, mais elles sont utilisées de manières différentes
.méthode d'appel :
Syntaxe : call([thisObj[,arg1[, arg2[, [,.argN]]]]])
Définition : Appeler une méthode d'un objet pour remplacer l'objet actuel par un autre objet.
Description :
La méthode call peut être utilisée pour appeler une méthode au nom 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 aucun paramètre thisObj n'est fourni, l'objet Global est utilisé comme thisObj.
Méthode d'application :
Syntaxe : apply([thisObj[,argArray]])
Définition : Appliquer une méthode d'un objet pour remplacer l'objet actuel par un autre objet.
Description :
Si argArray n'est pas un tableau valide ou n'est pas un objet arguments, une TypeError sera provoquée.
Si ni argArray ni thisObj ne sont fournis, l'objet Global sera utilisé comme thisObj et aucun paramètre ne pourra être transmis
La fonction de call and apply est d'emprunter les méthodes d'appel d'autres personnes, tout comme appeler la vôtre.
Leurs différences :
apply : Il ne peut y avoir que deux paramètres au maximum : le nouvel objet this et un tableau argArray. Si plusieurs paramètres sont transmis à cette méthode, tous les paramètres seront écrits dans ce tableau. Bien entendu, même s'il n'y a qu'un seul paramètre, il sera écrit dans le tableau. Si argArray n'est pas un tableau valide ou n'est pas un objet arguments, une TypeError sera provoquée. Si ni argArray ni thisObj ne sont fournis, l'objet Global sera utilisé comme thisObj et aucun paramètre ne pourra être transmis.
appel : il s'agit d'une liste de paramètres directe, principalement utilisée lorsque diverses méthodes d'objets js s'appellent mutuellement pour maintenir la cohérence du pointeur d'instance actuel, ou pour modifier ce pointeur dans des circonstances particulières. Si le paramètre thisObj n'est pas fourni, l'objet Global est utilisé comme thisObj.
Pour le dire plus simplement, les fonctions de apply et call sont les mêmes, mais la forme de la liste de paramètres transmise est différente : par exemple, la méthode d'écriture apply correspondante de func.call(func1,var1,var2, var3) est :
func.apply(func1,[var1,var2,var3])
Par exemple :
add.apply(sub,[3,1]); //add.call(sub,3,1); var a={ n:1, m:2, add:function(){ return this.n+this.m; } } var b={n:3,m:4 } console.log(a.add.call(b));//b.n+b.m=7 function Animal(){ this.name = "Animal"; this.showName = function(){ alert(this.name); } } function Cat(){ this.name = "Cat"; } var animal = new Animal(); var cat = new Cat(); //通过call或apply方法,将原本属于Animal对象的showName()方法交给对象cat来使用了。 //输入结果为"Cat" animal.showName.call(cat,","); animal.showName.apply(cat,[]);
Le contenu ci-dessus est la définition des méthodes d'application et d'appel et la différence entre les méthodes d'application et d'appel introduites par l'éditeur. J'espère que vous l'aimerez.