关于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的用法有误解?

阅读 2.3k
2 个回答
child.$emit.apply(child, [eventName].concat(params));

等价的 ES6 代码

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

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

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

推荐问题
宣传栏