起因:
- 一直是面试中经常会提到的问题
- 知道会用,但总讲不清,借此机会总结记录一下。
概念:
- call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。
- apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。
- 两者用途都是在特定的作用域中调用函数,等于重新设置了函数体内this对象的值,以扩充函数赖以运行的作用域。
- 每一个Function对象都有一个apply()方法和一个call()方法
相同点:
- 两个方法的作用是一样的
- 两个方法的第一个参数的作用是一样的
不同点:
- call方法可以接收多个参数
- Apply方法只能接收2各参数,所以其第二个参数往往是作为数组形式传入
举例:
function add(c,d){
return this.a + this.b + c + d;
}
var s = {a:1, b:2};
console.log(add.call(s,3,4)); // 1+2+3+4 = 10
console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14