bind用于改变函数的this指针,它于call和apply不同
call和apply是在这个函数被调用并执行之前才改变This指针
bind是在这个函数被声明时就可以预先绑定改变这个函数的this指针的事件监听,调用执行这个函数时这个事件监听就会触发,从而强制改变这个函数本有的this指针
用途
1.在声明一个函数并将函数绑定事件监听时,此时却又不想this执行事件监听对应的元素,可以在函数被声明时事先用bind设置这个被声明函数执行时的this指向
案例一、改变事件监听函数的this指针
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="bind">测试bind</div>
<script type="text/javascript" language="JavaScript">
document.getElementById("bind").onclick=function () {
console.log("我的名字是"+this.name);
}.bind({name:"qinyi"});
</script>
</body>
</html>
案例二、改变回调函数的this指针,解决回调函数在ajax中的this作用域问题 无需事先声明_this
// doSucess传入时将doSucess的this指针事先绑定bind,执行时会强制执行当前组件的实例
api.post_data(config.config.apiurl, postdata, this.doSucess.bind(this));
/**
* api 接口请求 一次性封装
* @param {*} url api 接口地址
* @param {*} data 请求的参数 请参看api请求文档示例
* @param {*} doSuccess 执行成功的回调
* @param {*} doFail 执行失败的回调
* @param {*} doComplete 执行完成的回调
*/
const post_data = (url, data, doSuccess = '', doFail = '', doComplete = '') => {
let back_data = ''
wx.request({
url: url,
data: data,
method: 'POST',
success(res) {
wx.setStorage({
key: 'is_network_error',
data: 0
})
if (doSuccess != '') {
doSuccess(res.data)
}
},
fail: function() {
wx.showToast({
title: '网络错误,请稍后重试!',
icon: 'none',
duration: 2000
})
wx.setStorage({
key: 'is_network_error',
data: 1
})
if (doFail != '') {
doFail()
}
},
complete: function(res) {
if (doComplete != '') {
doComplete()
}
}
})
return back_data;
}
module.exports = {
post_data: post_data
}
案例三、改变类的函数的指针,使指定对象能调用那个类的函数
Array.prototype.splice.bind("wwdwdw");
博文
https://blog.youkuaiyun.com/qq_34629352/article/details/88567033