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.箭头函数 -- 待总结????

浙公网安备 33010602011771号