JavaScript:call、apply、bind你了解吗?

  • call 接收多个参数,第一个参数是要指向的对象,后面的参数是方法所需要的形参值,call的第一个参数不传或者是null,undefind,默认传参window全局对象
    const obj = {
      names: '小明',
      fn: function (sex, age) {
        console.log(this.names, sex, age);
      }
    }
    const obj2 = {
      names: '小红',
    }
    obj.fn.call(obj2, '女', 19) //小红 女 19
    obj.fn.call(this, '女', 19)//undefined "女" 19 this指向window全局对象
  • apply 接收两个参数,第一个参数是要指向的对象,第二参数为一个数组,数组里面传方法所需要的形参值,apply的第一个参数不传或者是null,undefind,默认传参window全局对象
    const obj = {
      names: '小明',
      fn: function (sex, age) {
        console.log(this.names, sex, age);
      }
    }
    const obj2 = {
      names: '小红',
    }
    obj.fn.apply(obj2,[ '女', 19])
  • bind 与前面两者有所区别,区别在于前面两者是自动执行,后者是手动执行,第一个参数不传或是null,undefind,默认传参window全局对象
    const obj = {
      names: '小明',
      fn: function (sex, age) {
        console.log(this.names, sex, age);
      }
    }
    const obj2 = {
      names: '小红',
    }
    //调用一次
    const fn = obj.fn.bind(obj2, '女', 19)
    fn()
    //调用多次
    const fn2 = obj.fn.bind(obj2)
    fn('女', 19)
    fn('男', 19)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容