Js(Javascript)中的apply方法的使用

JavaScript 中的 apply() 方法用于调用函数,允许指定函数的 this 对象和参数。也就是通过function的apply方法来调用方法,可以改变方法的this的对象,并且还可以传入方法参数,apply对于面向对象编程还是很有用的。

1、基本语法

在 JavaScript 中,apply 方法是函数对象的一个非常重要的方法。它允许你调用一个函数,同时可以为这个函数指定 this 值(函数运行时指向的对象)。

func.apply(thisArg, [argsArray])
  • func:要调用的函数。
  • thisArgfunc 函数运行时的 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)


推荐阅读
cjavapy编程之路首页