call()修改this的指向
- 调用一个函数时,临时更改一次函数中this的指向,调用结束后,this恢复原样
- 使用: 要调用的函数.call(替换this的对象,实参值)
function total(base,bous){
console.log(`${this.name}的总数为${base+bous}`)
}
var lizi = {name: "栗子"}
var xiyang = {name: "夕阳"}
total.call(lizi,1,2)
apply()修改this的指向
- 实参值列表是放在一个数组中给的,需要使用apply()
- apply()会先打散数组为多个值,在传给函数
- 要调用的函数.apply(替换this的对象,数组)
function total(base,bous1,bous2){
console.log(`${this.name}的总数为${base+bous1+bous2}`)
}
var lizi = {name: "栗子"}
var xiyang = {name: "夕阳"}
total.apply(lizi,[1,2,3])
bind()修改this的指向
- 基于原函数创建一个一模一样的函数副本,并永久替函数副本中的this为指定的对象
- var 新函数名 = 要调用的函数.bind(替换this的对象,固定的实参值)
function total(base,bous1,bous2){
console.log(${this.name}的总数为${base+bous1+bous2})
}
var lizi = {name: "栗子"}
var xiyang = {name: "夕阳"}
var total2 = total.bind(lizi,1)
total2(2,3)
回调函数中的this必须用bind()来修改
var lizi = {name: "栗子"}
var xiyang = {name: "夕阳"}
setTimeout(function(){
console.log(`${this.name}...`)
}.bind(lizi),2000)