H5W3
当前位置:H5W3 > 其他技术问题 > 正文

关于element源码中broadcast方法的疑问

不废话,直接上码:

function broadcast(componentName, eventName, params) {
  this.$children.forEach(child => {
    const name = child.$options.name;

    if (name === componentName) {
      child.$emit.apply(child, [eventName].concat(params));
    } else {
      broadcast.apply(child, [componentName, eventName].concat([params]));
    }
  });
}

然后就是关于 child.$emit.apply(child, [eventName].concat(params))这一句,这句代码的意思就是找到要找的子组件后,调用它的$emit方法触发自定义事件,但是关于这个apply的用法我是没有看懂,child.$emit.apply(chlid),这不是跟child.$emit没区别吗?为啥不直接用child.$emit呢?还是说我对apply的用法有误解?

回答:

child.$emit.apply(child, [eventName].concat(params));

等价的 ES6 代码

child.$emit(child, ...[eventName].concat(params));

为了兼容性啥的,不能用 ES6 代码,就要用 apply

回答:

apply 在传参上是有一些细节需要注意的。其具体用法,可以参考我写的 这篇文章

本文地址:H5W3 » 关于element源码中broadcast方法的疑问

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址