共同点:他们的作用都是改变this的指向
不同点是 :call方法可以传给该函数的参数分别作为自己的多个参数,
而apply方法必须将传给该函数的参数合并成一个数组作为自己的一个参数
例
function Student(name) {
this.name = name
this.showName = function() {
console.log(this.name)
}
this.abc = function(a, b, c) {
console.log(this.name + a + b + c)
}
}
var s1 = new Student("小明")
var s2 = new Student("小红")
s1.showName() // 小明
使用call() 方法将s1.showName() this指向 改为s2
// call (对象,参数1,参数2,...)
s1.abc.call(s2, 1, 2, 3) // 小红456
使用apply() 方法将s1.showName() this指向 改为s2
var arr = [4, 5, 6]
s1.abc.apply(s2, arr) //小红4, 5, 6
ps: apply也可以用来求一组数中的最大值
// Math 方法
var result = Math.max(50, 30, 100, 20, 1)
console.log(result)
// apply方法
var arr2 = [50, 30, 100, 20, 1]
var result = Math.max.apply(null, arr2)
console.log(result)