bind与call, apply一样,就是用来改变this指向的,不同的是,bind不会执行函数,而是返回一个新的函数
var name = ‘小王‘, age = 17; var obj = { name: ‘小张‘, objAge: this.age, myFun: function() { console.log(this.name + ‘年龄‘ + this.age); } } console.log(obj.objAge); //17, obj里面的this指向window,字面量的{}不构成作用域 obj.myFun(); //小张年龄undefined,此时myFun中的this指向obj
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, ‘成都‘, ‘上海‘);//德玛年龄99 来自成都去往上海 obj.myFun.apply(db, [‘成都‘, ‘上海‘]);//德玛年龄99 来自成都去往上海 obj.myFun.bind(db, ‘成都‘, ‘上海‘)();//德玛年龄99 来自成都去往上海 //预定义参数 obj.myFun.bind(db, [‘成都‘, ‘上海‘])();//德玛年龄99 来自成都,上海去往undefined obj.myFun.bind(db, [‘成都‘, ‘上海‘])(‘北京‘);//德玛年龄99 来自成都,上海去往北京
call和apply的用法在这里就不赘述了
关于bind方法的多参数问题:
bind的第一个参数也是this所指向的对象,但是从第二个参数开始,就是bind方法所返回函数的预定义参数,第二个参数对应新函数的第一个参数,第三个参数对应新函数的第二个参数以此类推,并且传参方式与call相同。
原文:https://www.cnblogs.com/wanqiblog/p/14225703.html