apply()与call()是js函数中用来改变this指向的两个方法,同时它们也具有向函数传参的功能。
向函数传参
apply()接收两个参数,一个是当前函数的this,一个是要传递的参数数组或arguments对象,比如如下
function man(name,age){ console.log(name+'的年龄是'+age); } function put(name,age){ man.apply(this,[name,age])//或者man.apply(this,arguments) } put('张三',26);//张三的年龄是26
而call()的使用方法与apply的使用方法差不多,不同的是call()传入多个参数,它需要把apply()的第二个参数展开传入。
function man(name,age){ console.log(name+'的年龄是'+age); } function put(name,age){ man.call(this,name,age) } put('张三',26);//张三的年龄是26
改变this指向
这两个方法最大的作用就是用来改变this的指向,在改变this指向时,两个方法传入的参数都是一样的,即想指向的this
let mycolor={ color:'bule' } function sayname(){ console.log(this.color)//bule console.log(this)//{color:'bule'} } sayname.apply(mycolor)//将sayname中的this改为了mycolor,这里使用call也是一样的
使用 call()或 apply()的好处是可以将任意对象设置为任意函数的作用域,这样对象可以不用关 心方法。