美文网首页
js相关——call()、apply()、bind()区别

js相关——call()、apply()、bind()区别

作者: 余音绕梁_0809 | 来源:发表于2020-03-27 14:20 被阅读0次

栗子:先看明白下面

var name = '大花';
  var age = 18;
  var obj = {
    name: '小花',
    objAge: this.age,
    // age: 20,
    describe: function () { 
      console.log(this);//obj 对象(这里的objAge是有值的,值为18)
      console.log(`${this.name}今年${this.age}岁`)
    },
    home: function(f,t) {
      console.log(`${this.name}今年${this.age}岁,来自${f},在${t}上班`)
    }
  }
  console.log(obj.objAge);//18
  obj.describe();//小花今年undefined岁
  // 若在obj中重新定义一个age为20,则此时打印出来的为"小花今年20岁"
  // 由此可知: 在obj对象的describe方法中 this的指向为 obj对象
  function myFun() {
    console.log(this);//window
    console.log(`${this.name}今年${this.age}岁`)
  }
  myFun();//大花今年18岁

  // 由上述可知: 在obj对象的describe方法中 this的指向为 obj对象
  //            在myFun()方法中          this的指向为 window
image.png

1、call()、apply()、bind()都是用来重定义 this 这个对象的

var objNow = {
    name: '花花',
    age: 26,
  }

  obj.describe.call(objNow);//花花今年26岁
  obj.describe.apply(objNow);//花花今年26岁
  obj.describe.bind(objNow)();//花花今年26岁

  // 上述 call()、apply()、bind()都可以改变this的指向;其中bind需要自调用
  // 这里的this指向都是指向objNow对象
image.png

2、对比call()、apply()、bind() 传参情况

  obj.home.call(objNow,'安徽','南京');//花花今年26岁,来自安徽,在南京上班
  obj.home.apply(objNow,['安徽','南京']);//花花今年26岁,来自安徽,在南京上班
  obj.home.bind(objNow,'安徽','南京')();//花花今年26岁,来自安徽,在南京上班
  obj.home.bind(objNow,['安徽','南京'])();//花花今年26岁,来自安徽,南京,在undefined上班
image.png

总结:

  • 1、这三个函数的第一个参数都是 this 的指向对象,
  • 2、第二个参数差别就来了:
    • call的参数是直接放进去的,第二第三第n个参数全都用逗号分隔,直接放到后面 obj.home.call(objNow,'安徽',...,'string');
    • apply的所有参数都必须放在一个数组里面传进去obj.home.apply(objNow,['安徽', ..., 'string' ]);
    • bind除了返回是函数以外,它的参数和call() 一样。

当然,三者的参数不限定是string类型,允许是各种类型,包括函数 、 object 等等
注意: 上述图片均为控制台的打印结果

相关文章

  • this_原型链_继承

    this相关问题 apply、call 、bind的作用以及区别 call、apply和bind方法的用法以及区别...

  • this_原型链_继承

    this 相关 1. apply、call 、bind有什么作用,什么区别 apply、call、bind可以改变...

  • this 原型链 继承

    this 相关问题 1.apply、call 、bind有什么作用,什么区别 apply、call 、bind这三...

  • 高级2 原型链 this

    this 相关问题 问题1: apply、call 、bind有什么作用,什么区别 **apply 和 call ...

  • this & 原型链 & 继承

    this 相关 问题1: apply、call 、bind有什么作用,什么区别 apply()和call()方法都...

  • this_原型链_继承

    this 相关问题 问题1: apply、call 、bind有什么作用,什么区别? apply,call,bin...

  • this_原型链_继承

    this 相关问题 apply、call 、bind有什么作用,什么区别 apply和call的作用非常相似,调用...

  • 高级2:this_原型链_继承

    this 相关问题 问题1: apply、call 、bind有什么作用,什么区别 call apply,调用一个...

  • 高级2 this_原型链_继承

    this 相关问题 1: apply、call 、bind有什么作用,什么区别 call apply,调用一个函数...

  • this_原型链_继承

    this 相关问题问题1: apply、call 、bind有什么作用,什么区别 call和apply,都是调用一...

网友评论

      本文标题:js相关——call()、apply()、bind()区别

      本文链接:https://www.haomeiwen.com/subject/wvcluhtx.html