1、基本语法
在 JavaScript 中,apply
方法是函数对象的一个非常重要的方法。它允许你调用一个函数,同时可以为这个函数指定 this
值(函数运行时指向的对象)。
func.apply(thisArg, [argsArray])
func
:要调用的函数。thisArg
:func
函数运行时的this
引用。如果该参数不是一个对象,那么它会被转换为对象。[argsArray]
:一个数组或类数组对象,func
函数的参数列表。
2、使用示例
1)改变函数的 this 上下文
function man() { this.Name="man"; this.SayName=function(){ alert(this.Name); } } function woman() { this.Name="woman"; this.SayName=function(){ alert(this.Name); } } function say(word,age) { //只有say方法的this是man,或是woman对象才可以调用,say方法本身是没有SayName方法的。 if(this.SayName) this.SayName(); alert(word+age); } var m=new man(); var w=new woman(); //通过apply方法调用say say.apply(m,["abc",20]); //用call调用,call和apply就传参数方式不同,两个方法的第一个参数是相同的,剩下call直接写say方法的参数就可以了,而apply是通过数组传入say方法参数的。 say.call(m,"abc",20); 用bind调用 say.bind(m,"abc",20)();//返回的是方法,还要在执行一下。
2)传递参数列表
function sum(a, b, c) { return a + b + c; } let nums = [11, 22, 33]; let result = sum.apply(null, nums); console.log(result); // 输出: 6
3、与 call 方法的比较
apply 方法与 call 方法非常类似,区别在于 call 方法接受的是一个参数列表,而 apply 接受的是一个参数数组。
function multiply(a, b) { return a * b; } let resultCall = multiply.call(null, 4, 6); // 10 console.log(resultCall) let resultApply = multiply.apply(null, [4, 6]); // 10 console.log(resultApply)