JavaScript中的call和apply用法

来源:互联网 发布:军用软件下载 编辑:程序博客网 时间:2024/05/29 16:38

上代码

<script type="text/javascript"> //定义一个人类function Person(name,age){    this.name=name;    this.age=age}//定义一个学生function Student(name,age,grade){    Person.apply(this,arguments)//定义时,this指Student, arguments打出来是["Li", 11, "一班", callee: ƒ, Symbol(Symbol.iterator): ƒ]    this.grade=grade}var s=new Student("Li",11,"一班")console.log(s);//{name: "Li", age: 11, grade: "一班"}</script>

分析

Person.apply(this,arguments)等同于
Person.call(this,name,age)

如果说Person和Student的参数顺序不一样,必须用call了

<script type="text/javascript"> //定义一个人类function Person(n,a){    this.n=n;    this.a=a}//定义一个学生function Student(age,name,grade){    Person.call(this,age,name)    console.log("1",this)//1 Student {n: "Li", a: 11}    this.grade=grade}var s=new Student("Li",11,"一班")console.log(s);//Student {n: "Li", a: 11, grade: "一班"}</script>

应用:

1.apply可以将数组转化为一个参数接一个参数
Math.max(param1,param2,param3…)

Math.max(1,3,5,2)//5

数组的话

Math.max([1,3,5,2])//NaNMath.max.apply(null,[1,3,5,2])5

上面是ES5的写法
ES6的话,直接用扩展运算符…,将数据组转化为参数序列:

Math.max(...[1,3,5,2])//5
原创粉丝点击