Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation de Js apply() (y compris le code)

Explication détaillée de l'utilisation de Js apply() (y compris le code)

亚连
亚连original
2018-05-18 10:05:151324parcourir

Ce qui suit est l'utilisation de Js apply() que j'ai compilée pour vous. Les étudiants intéressés peuvent y jeter un œil.

Explication détaillée de la méthode d'application de Js

Quand j'ai vu pour la première fois les fonctions javascript s'appliquer et appeler, elles étaient très floues et je ne pouvais pas les comprendre récemment. en ligne Après avoir lu quelques exemples de la méthode d'application et consulté certains articles, j'en ai enfin eu un aperçu. Ici, je vais prendre les notes suivantes et j'espère les partager avec vous s'il y a quelque chose qui ne va pas ou si l'explication n'est pas claire. , j'espère que les lecteurs pourront me faire quelques commentaires. , afin de progresser ensemble..

Je souhaite principalement résoudre quelques problèmes :

1. Quelle est la différence entre postuler et appeler ?

2. Dans quelles circonstances appliquer doit-il être utilisé ? , quand utiliser l'appel

3. Autres utilisations intelligentes de appliquer (généralement dans quelles circonstances appliquer peut être utilisé)

J'ai d'abord recherché les définitions de apply et call sur Internet, puis j'ai utilisé des exemples pour expliquer la signification de ces deux méthodes et comment les utiliser

apply : La méthode peut détourner la méthode d'un autre objet et. hérite des propriétés d'un autre objet.

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 qui sera transmis à Function en tant que paramètre (args--> arguments)

call : La signification est la même que celle de apply, mais la liste des paramètres est différente

.

Function.call(obj,[param1[,param2[,…[,paramN]]] ])

obj : Cet objet remplacera l'objet this dans la classe Function

params : Ceci est une liste de paramètres

1.apply示例:  
<script type="text/javascript">   
/*定义一个人类*/   
function Person(name,age) {   
    this.name=name; this.age=age;   
}   
 /*定义一个学生类*/   
functionStudent(name,age,grade) {   
    Person.apply(this,arguments); this.grade=grade;   
}   
//创建一个学生类   
var student=new Student("qian",21,"一年级");   
//测试   
alert("name:"+student.name+"\n"+"age:"+student.age+"\n"+"grade:"+student.grade);   
//大家可以看到测试结果name:qian age:21 grade:一年级   
//学生类里面我没有给name和age属性赋值啊,为什么又存在这两个属性的值呢,这个就是apply的神奇之处.   
</script>

Analyse : Person.apply(this,arguments ; Il y a des instructions telles que this.name et ainsi de suite dans la classe, afin que les attributs soient créés dans l'étudiant object

2.exemple d'appel

arguments:是一个数组,也就是[“qian”,”21”,”一年级”];
Dans la fonction Étudiant, apply peut être modifié comme suit :

C'est ok

3. utiliser apply et quand utiliser call ?

Person.call(this,name,age);
Dans le cas de donner des paramètres d'objet, si la forme du paramètre est Lors de l'utilisation d'un tableau, par exemple, dans l'exemple apply, les arguments du paramètre sont passés This. Le paramètre est un type de tableau, et lors de l'appel de Person, la liste de paramètres est cohérente (c'est-à-dire que les deux premiers chiffres de la liste de paramètres pour Person et Student sont cohérents en utilisant apply, si la liste de paramètres de ma personne est comme ceci (âge,). name), et la liste de paramètres de l'étudiant est (nom, âge, note), alors je peux utiliser call pour l'implémenter, c'est-à-dire spécifier directement la valeur correspondante de l'emplacement de la liste de paramètres (Person.call(this,age,name, grade));

4. Quelques autres utilisations intelligentes de apply

Les personnes prudentes ont peut-être remarqué que lorsque j'appelle la méthode apply Lors de l'appel de Person, le premier paramètre est un objet (this), et le deuxième paramètre est une collection de tableaux.

Lors de l'appel de Person, ce dont il a besoin n'est pas un tableau, mais pourquoi m'a-t-il donné un tableau. Les tableaux peuvent toujours être analysés en paramètres un par un

C'est une utilisation intelligente de apply. Un tableau peut être converti en liste de paramètres par défaut ([param1, param2, param3] est converti en param1, param2, param3) Si nous utilisons un programme pour convertir chaque élément de le tableau dans une liste de paramètres, cela peut prendre un certain temps. Avec l'aide de cette fonctionnalité d'application, nous avons la méthode efficace suivante :

a) Math.max peut obtenir le plus grand élément du tableau

Parce que le paramètre Math.max ne prend pas en charge Math.max([param1, param2]), qui est un tableau

Mais il prend en charge Math.max(param1, param2, param3... ), afin que vous puissiez le résoudre en fonction de la fonctionnalité de apply tout à l'heure var max=Math.max.apply(null, array), afin que vous puissiez facilement obtenir un tableau Le plus grand élément

(apply convertira un tableau en paramètre et transmettez-le à la méthode un paramètre après l'autre)

         这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,.所以直接传递了一个null过去  

b)Math.min  可以实现得到数组中最小的一项  

同样和 max是一个思想 var min=Math.min.apply(null,array);  

c)Array.prototype.push 可以实现两个数组合并  

同样push方法没有提供push一个数组,但是它提供了push(param1,param,…paramN) 所以同样也可以通过apply来装换一下这个数组,即:  

vararr1=new Array("1","2","3");   
 vararr2=new Array("4","5","6");   
Array.prototype.push.apply(arr1,arr2);

也可以这样理解,arr1调用了push方法,参数是通过apply将数组装换为参数列表的集合.  

通常在什么情况下,可以使用apply类似Math.min等之类的特殊用法:  

一般在目标函数只需要n个参数列表,而不接收一个数组的形式([param1[,param2[,…[,paramN]]]]),可以通过apply的方式巧妙地解决这个问题!  

5.总结:  

一开始我对apply 非常的不懂,最后多看了几遍,自己多敲了几遍代码,才明白了中间的道理,所以,不管做什么事情,只要自己肯动脑子,肯动手敲代码,这样一个技术就会掌握…     

还有比如第四部分得内容,巧妙的解决了实实在在存在的问题,这个肯定不是一个初学者能想到的解决方案(这个也不是我自己想的),没有对编程有一定认识的不会想到这个的,还是一句话,多积累,多学习,提升自己的能力和对编程思想的理解能力才是最关键!  

上面是我整理给大家的Js apply()使用,希望今后会对大家有帮助。

相关文章:

简单易懂,javascript自学学习笔记

在页面自动执行(加载)js的几种解决方法,详细代码解析

利用js 来判断客户端能否上网(代码附上)

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