apply 和 call 什么含义,什么区别 ?什么时候用 ?

2022-03-12T17:37:37

call,apply 都属于 Function.prototype 的一个方法,它是 JavaScript 引擎内在实现的,因为属于 Function.prototype,所以每个 Function 对象实例(就是每个方法)都有 call,apply 属性。

既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。

语法:

foo.call(this, arg1, arg2, arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);
  • 相同点:两个方法产生的作用是完全一样的。
  • 不同点:方法传递的参数不同。

每个函数对象会有一些方法可以去修改函数执行时里面的 this,比较常见得到就是 call 和 apply,通过 call 和 apply 可以重新定义函数的执行环境,即 this 的指向。

function add(c, d) {
  console.log(this.a + this.b + c + d);
}

var o = { a: 1, b: 3 };
add.call(o, 5, 7);    //1+3+5+7=16
//传参的时候是扁平的把每个参数传进去

add.apply(o, [10, 20]);   //1+3+10+20=34
//传参的时候是把参数作为一个数组传进去

//什么时候使用 call 或者 apply
function bar() {
  console.log(Object.prototype.toString.call(this));
  // 用来调用一些无法直接调用的方法
}

bar.call(7); // "[object Number]"
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »