call(),apply(),bind()函数的使用

66 阅读1分钟
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)    //1为永久固定第一个参数的值
total2(2,3)
回调函数中的this必须用bind()来修改
var lizi = {name: "栗子"}
var xiyang = {name: "夕阳"}

setTimeout(function(){
    console.log(`${this.name}...`)
}.bind(lizi),2000)