和call,apply一样,也是用来改变函数中的this关键字的,只不过基于bind改变this,当前方法并没有执行,类似于预先改变this
let obj = {name:'obj'};
let fn = function(){
console.log(this.name);
}
document.body.onclick = fn; //当事件触发,this指向body
// 点击body。让fn中的this指向obj
document.body.onclick = fn.call(obj); // 这里fn.call已经执行将this指向了obj,然后将返回结果给了body
document.body.onclick = function(){
fn.call(obj)
}
//这里点击body其实执行了2个函数,首先匿名函数执行,然后fn的this指向到了obj
document.body.onclick = fn.bind('obj');
// bind 的好处是:通过bind方法只是预先把fn中的this指向了obj,不过此时fn函数并没有执行,当点击事件触发后,才会执行fn(call,apply方法都是改变this的同时立即执行了方法)在ie6~8不支持bind方法,预先做啥事情的思想被称为“柯理化函数”