call(),apply(),bind()都是用来重定义this这个对象

1.前提必须是function声明方法其他时不行的,除了箭头函数

var name='小王',age=17;
var obj={
  name:'小张',
  objAge:this.age,
  myFun:function(){
    console.log(this.name+"年龄"+this.age);
}
}
var db={
  name:'德玛',
  age:99
}
//obj {name: '小张', objAge: 17, myFun: ƒ}

obj.myFun.call(db)
obj.myFun.apply(db)
obj.myFun.bind(db)()  //这个bind方法需要加上()再执行才能得出结果
//德玛年龄 99 x3
//bind方法是返回一个新的函数,需要调用它才会被执行,其他方法是直接执行

2.对比call bind apply传参情况

var name='小王' ,age=17;
var obj={
   name:'小张',
   objAge:this.age,
   myFun:function(fm,t){
   console.log(this.name+"年龄"+this.age,"来自"+fm+"去往"+t);
 }
}
var db={
  name:'德玛',
  age:99
}
obj.myFun.call(db,'成都','上海');
obj.myFun.apply(db,['上海','成都']);
obj.myFun.bind(db,['成都','上海'])()
//德玛年龄99 来自成都去往上海
//德玛年龄99 来自上海去往成都
//德玛年龄99 来自成都,上海去往 undefined
//bing除了需要返回是函数和apply参数是一样的第二个是数组,call是直接放参数

第一个参数是this指向,第二个参数bind和apply是数组,call是直接方参数

三者参数不一定是字符串,还是各种类型,函数和object

3.箭头函数 -- 待总结????

posted @ 2022-03-05 16:37  cc-front  阅读(38)  评论(0)    收藏  举报