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

Can I use the same function names when using Object.assign() in 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

使用组合的约定是 "thing-doer"。您的 updateScore 组合物是 "scoreUpdater" 而它是 "updateScore"。

会这样写:

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

现在,update 出于清晰度和设计原因,它本身就是一个相当糟糕的名称。想象一下另一个将更新健康的组合:healthUpdater 也实现了 update 方法。其中一个将覆盖另一个。

一般来说,组合体中的属性名称应该以某种方式明确指代组合体本身。

canUpdateScore 绝对是一个糟糕的对象名称,无论它是否暗示一个布尔值,事实并非如此。