当前位置: 首页 > Web前端 > JavaScript

apply、call、bind的区别

时间:2023-03-26 23:51:38 JavaScript

applycallbind都是可以改变函数指向的方法this//以调用为例varname='windowname'functionshow_name(){console.log(this.name)}show_name()//windownamevarperson={name:'personname'}show_name.call(person)//personnameapplycallbind函数内部也可以传参//以call为例varname='windowname'functionshow_info(age,sex){console.log(this.name+':'+'age:'+age+'sex:'+sex)}show_info(28,'male')//窗口名称:age:28sex:malevarperson={name:'人名'}show_info.call(person,28,'male')//personname:age:28sex:male三者的区别apply和call可以主动触发函数调用,bind有返回值,需要手动触发call和bind传参的形式同上,apply是以数组的形式传参//apply和call可以主动触发函数调用,bind需要手动触发functionshow_info(age,性别){console.log(this.name)}varperson={name:'personname'}show_info.call(person)//人名show_info.bind(person)//无效constfun=show_info.bind(person)fun()//call和bind的传参形式相同,apply是以数组形式传参functionshow_info(age,sex){console.log(this.name+':'+'age:'+年龄+'性别:'+性别)}varperson={name:'人名'}show_info.call(person,28,'male')//人名:age:28sex:maleconstfun=show_info.bind(person,28,'male')fun()//人名:age:28sex:maleshow_info.apply(person,[28,'male'])//personname:age:28sex:male注意:es6中的箭头函数不能用上面的方法修改这个点