🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # call方法和apply方法 **call()和apply()都是挂在挂载在Function原型链上** ## 1.语法 ***** 第一.call() 对象1.方法.call(对象2); >[info]方法一定不能带括号 ***** 第二.apply() 对象1.方法.apply(对象2); >[info]方法一定不能带括号 ***** **特点** apply()和call()不仅能方法借用、借用其他对象的方法,还能改变this指向 ## 2.区别 **在不传入参数的情况下,两个方法没有任意的区别** ***** **传参:** >[success]call()方法,后面的参数可以是**任意数据类型** apply()方法,后面的参数只能是**数组** <br> ```javascript var obj1 ={ name :"wc", age:13, add:function(a,b){ returna+b; } } var obj2 ={ name :"lw", } console.log(obj1.add.call(obj2,1,2));//借用obj1的add方法,并传入实参计算,后面参数可以是任意数据类型的值 console.log(obj1.add.apply(obj2,[2,2]));//apply后面的参数只能是数组 ``` ## 3如何改变this的指向 看call()和apply(),传递的第一个参数,第一个参数就是this指向 <br> ```javascript var obj1 ={ name:"zs", age:18, say:function(){ console.log(this.name+"借用了");//this指向的是zs }, } var obj2 \={ name:"lw", } // obj1.say.call(obj2); //obj2借用了obj1对象的方法,同时改变了this的指向,this指向的是lw obj1.say.apply(obj2);//obj2借用了obj1对象的方法,同时改变了this的指向,this指向的是lw console.log(obj2); ``` <br>