bind、call、apply主要用于改变函数内部的上下文。bind方法会返回一个函数,方便后续调用;而call、apply方法会直接调用,当然也有参数的不同。
对于传参 apply 需要将参数包装成数组依次传递给原始函数;bind、call则和原始函数传参形式一致。
例如:
let obj = {
name: "小李",
trajectory: function(from, to){
console.log(`${this.name} from ${from} to ${to}`)
}
}
let person = {
name: "胡三疯"
}
// bind
let bindFunc = obj.trajectory.bind(person, "河南", "杭州")
bindFunc()
// apply
obj.trajectory.apply(person, ["河南", "杭州"])
// call
obj.trajectory.call(person, "河南", "杭州")