【JavaScript29】call和apply

发布时间 2023-08-08 23:36:52作者: Tony_xiao
  • 概率

    • 每个函数都包含两个非继承而来的方法:apply() 和 call()
    • call和apply都属于Function.prototype的一个方法,所以每个function实例都有call、apply属性
  • 作用

    • call() 方法 和 apply() 方法的作用相同:改变this指向
  • 区别

    • call():第一个参数是this,其余参数都是直接传递给函数,传递时函数必须逐个列举出来
    • apply():传递给函数的是参数数组
  • 正常的函数调用是无法改变this指向的;通过call或者apply可以改变this指向

function fn(a, b){
    console.log(this);
    return a + b;
}

var obj = {name: "qiaofu"};

var ret = fn(1, 2); // 这种方式是无法改变this的
console.log(ret);

var ret1 = fn.call(obj, 1, 2); // 动态的调整函数的this指向.
console.log(ret1);

  • call与apply不同点,参数传值
function fn(a, b){
    console.log(this.name);
    return a + b;
}

var obj = {name: "盖伦"};

var ret1 = fn.call(obj, 1, 2);
console.log(ret1);

// apply和call的区别: apply在给函数传递参数的时候. 是一个整体(数组)传递
var ret2 = fn.apply(obj, [1, 2]);
console.log(ret2);