bind的用法

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相同。

 

posted @ 2021-01-03 15:42  helloworld!!!?  阅读(673)  评论(0)    收藏  举报