apply 和 call 什么含义,什么区别 ?什么时候用 ?
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]"
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »