和call,apply一样,也是用来改变函数中的this关键字的,只不过基于bind改变this,当前方法并没有执行,类似于预先改变this

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