apply() 方法调用一个函数, 其具有一个指定的 this 值,以及作为一个数组(或类似数组的对象)提供的参数。
注意:该方法的作用和 call() 方法类似,只有一个区别,就是 call() 方法接受的是若干个参数的列表,而 apply() 方法接受的是一个包含多个参数的数组。
语法:
fun.apply(thisArg, [argsArray])

  1. <script>
  2. function f1(a, b) {
  3. console.log(a + b);
  4. console.log(this);
  5. }
  6. f1.apply(null, [100, 200]);
  7. </script>

image.png
/
参数:
1. thisArg
2. argsArray
/
apply() 与 call() 非常相似,不同之处在于提供参数的方式。 apply() 使用参数数组而不是一组参数列表。例如:

使用apply和call改变函数中this的指向

function f1(x,y) {
   console.log("这个函数是window对象的一个方法:"+(x+y)+this.sex);
}
window.f1(10,20);
//obj是一个对象
var obj={
     age:10,
     sex:"男"
};
window.f1.apply(obj,[10,20]);
window.f1.call(obj,10,20);
console.dir(obj);

image.png

通过apply和call改变原型方法中this的指向

function Person(age,sex) {
    this.age=age;
    this.sex=sex;
}
//通过原型添加方法
Person.prototype.sayHi=function (x,y) {
    console.log("您好啊:"+this.sex);
    return 1000;
};
var per=new Person(10,"男");
per.sayHi();
console.log("==============");
function Student(name,sex) {
    this.name=name;
    this.sex=sex;
}
var stu=new Student("小明","人妖");
var r1=per.sayHi.apply(stu,[10,20]);
var r2=per.sayHi.call(stu,10,20);
console.log(r1);
console.log(r2);

image.png