call bind apply (遇到的坑)

95 阅读1分钟

首先今天遇到一些坑, 再总结一下这几个方法

call()

  1. 可以改变函数的this指向
  2. 并且同时调用函数
  3. 可以传参数call(obj, 参数1, 参数2)
  4. 返回值是原来函数的返回值

apply()

  1. 可以改变函数的this指向
  2. 并且同时调用函数
  3. 参数必须是数组或者是伪数组(因为伪数组也是数组)
  4. 返回值是原函数的返回值

bind()

  1. 不会调用函数
  2. 可以传参数bind(obj, 参数1, 参数2)

3. 返回值指定的(this和初始化)参数改造的原函数拷贝(今天就载这了)

坑 !! 实现popover组件时, 我需要点击按钮显示, 点击其他地方消失的需求

  1. 因为防止点击时已经监听事件
  2. 加了延时, 点击1秒后创建事件
  3. 再点击document的click时删除事件
  4. 但是我为了可以删除事件就把这里的箭头函数改为命名函数用bind()改变this执行等价于箭头函数
  5. 然后缺没有删除以前的事件 image.png

发现其实是bind没掌握好 他会返回新函数, 我们删除x并不是bind返回的新函数

解决办法,还是用箭头函数, 给箭头函数加名字 image.png