在组合中使用Object.assign()时,可以使用相同的函数名称吗?

时间:2018-08-04 22:42:45

标签: javascript composition function-composition

上下文

我使用Javascript中的合成范例创建了一个新对象。

const canUpdateScore = (state) => ({
    update: (spell) => state.score-- 
})

const mage = (name) => {
  let state = {
    score: 100,
  }
  return Object.assign(state, canUpdateScore(state));
}

scorcher = mage()
scorcher.update();    // call the update method
console.log(scorcher.score)    // 99

问题

将辅助方法命名为与返回该方法的外部函数相同(下面的示例)会引起混淆吗?还是最好使用不同的名称(在上面的上下文中)?

const updateScore = (state) => ({
    updateScore: (spell) => state.score-- 
})

const mage = (name) => {
  let state = {
    score: 100,
  }
  return Object.assign(state, updateScore(state));
}

scorcher = mage()
scorcher.updateScore();    // call the update method
console.log(scorcher.score)    // 99

1 个答案:

答案 0 :(得分:1)

使用合成的惯例是“做事者”。您的updateScore作曲家是“ scoreUpdater”,它是“ updateScore”。

会这样写:

const scoreUpdater = (state) => ({
    updateScore: (spell) => state.score-- 
})

现在,update本身就是一个很糟糕的名称,这既出于清晰性原因,也出于设计原因。想象一下,您会发现另一个将更新运行状况的合成器的情况:healthUpdater也实现了update方法。其中一个将覆盖另一个。

通常,构成要素中的属性名称应以某种方式明确引用构成要素本身。

canUpdateScore绝对不是一个对象的坏名字,无论它暗示的是布尔值,还是不是这种情况。