apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。
call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。
都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”。
实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。
function add (a, b) {
console.log(this)
return a + b
}
function sub (a, b) {
console.log(this)
return a - b
}
var a1 = add.apply(sub, [4, 2])// 执行add函数,函数内部this指向sub
//var a1 = add.call(sub,4,2); //同上
var a2 = sub.apply(add, [4, 2])// 执行sub函数,函数内部this指向add
alert(a1) //6
alert(a2) //2