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)