【问题标题】:Spread operator used in conjuction with a function in ES6 , inside Vue.js在 Vue.js 中与 ES6 中的函数结合使用的扩展运算符
【发布时间】:2019-05-31 10:50:12
【问题描述】:

我刚刚浏览了 habitica 代码(一个 vue.js 应用程序),并遇到了下面的传播运算符用法,例如 HERE。在计算里面你有以下内容:

computed: {
  ...mapState({
    user: 'user.data',
    castingSpell: 'spellOptions.castingSpell',
    isRunningYesterdailies: 'isRunningYesterdailies',
  }),
}

现在我似乎从来没有将扩展运算符与函数结合使用,不确定这里发生了什么,mapState 发生在另一个文件中的函数,看起来像这样:

export function mapState (states) {
  const res = {};

  normalizeMap(states).forEach(({ key, val }) => {
    res[key] = function mappedState () {
      return typeof val === 'function' ?
        val.call(this, this.$store.state, this.$store.getters) :
        get(this.$store.state, val);
    };
  });

  return res;
} 

当与Array 或Object 一起使用时,我了解展开运算符,但函数到底发生了什么?

【问题讨论】:

  • 函数返回一个对象,这就是展开运算符的用途。
  • 函数正在返回一个对象,该对象最终会传播到您的 computed 对象上

标签: javascript vue.js ecmascript-6


【解决方案1】:

你的函数返回一个Object,它正在被传播,

举个简单的例子就可以理解

  • 这里的func 是一个函数,它根据传递给它的值创建一个对象
  • 在me 对象内,我有一个名为info 的属性,我想将其设置为对象,所以我只需用name and age 调用func 并传播

let func = (name,age)=> ({name,age})

let me = {
  info: {...func('code maniac', 24)}
}

console.log(me)

【讨论】:

  • 谢谢,但是 vue.js 中的 computed 属性不应该只包含函数吗?
  • @AlexanderSolonik 对象的值是函数。
  • @AlexanderSolonik 实际上并不是您分配任何有效值的对象,最终此函数所做的是分配 key/value 但基于某些条件或参数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2020-05-08
  • 1970-01-01
  • 2018-06-09
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多