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

Javascript 在组合中使用Object.assign()时,我可以使用相同的函数名吗?,javascript,composition,function-composition,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 = m

上下文

我使用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
问题

将assing方法命名为与返回该方法的外部函数相同的名称(下面的示例)会令人困惑吗?还是使用不同的名称(在上面的上下文中)会更好


使用构图的惯例是“做事情的人”。您的
updateScore
composant是一个“scoreUpdater”,它是“updateScore”的

我会这样写:

const scoreUpdater = (state) => ({
    updateScore: (spell) => state.score-- 
})
现在,
update
本身就是一个相当糟糕的名字,无论是出于清晰的原因还是出于设计的原因。想象一下,您使用另一个组件来更新健康状况:healthUpdater,它还实现了一个
update
方法。其中一个将覆盖另一个

通常,组件中的属性名称应该以某种方式显式地引用组件本身


canUpdateScore
对于一个对象来说绝对是一个糟糕的名称,不管它是否意味着一个布尔值,但事实并非如此。

你可以,但是如果有一个名为
的独立函数,并且还有一个同名对象的属性,这肯定有点令人困惑。请注意,
canUpdateScore
updateScore
函数实际上并不更新分数-它们返回一个对象,该对象具有一个属性,如果调用该属性,该属性将更新分数。也许
makeUpdateScoreObj
会更准确一点您可以使用任何您喜欢的名称(它是JS,没有规则!),但是您的第二个代码片段读起来更容易。@CertainPerformance我喜欢您的观点。我在使用Object.assign时阅读了有关MDN对象的更多信息。我应该记住,如果一个属性包含一个对象,它是对该对象的引用,而不是一个新副本。这很有意义。谢谢你的澄清。
const scoreUpdater = (state) => ({
    updateScore: (spell) => state.score-- 
})