为了账号安全,请及时绑定邮箱和手机立即绑定

在命名常量中间使用变量

在命名常量中间使用变量

www说 2023-07-20 15:36:03
我的语言设置可以替换应用程序中的字符串。为了避免魔术字符串,我定义了命名常量,但问题是我需要在其中注入一个变量。例如,const language_settings = {   en: {     NOTIFICATION: 'Send notification to my phone',     TIME_REMANING: `Remaining time ${seconds} seconds`  },  fr: {    NOTIFICATION: 'Envoyer verification sur mon portable',    TIME_REMANING: `Temps restant ${seconds} secondes`   }}export default language_settings;当然,上面的代码由于未定义的“秒”变量而引发异常。另外,我不想仅仅因为这个就将字符串分成两部分。我可以在不做任何重大修改的情况下做到这一点吗?
查看完整描述

3 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

你可以让它们发挥作用:


const language_settings = {

   en: {

     NOTIFICATION: 'Send notification to my phone',

     getTimeRemaining: seconds => `Remaining time ${seconds} seconds`

  },

  fr: {

    NOTIFICATION: 'Envoyer verification sur mon portable',

    getTimeRemaining: seconds => `Temps restant ${seconds} secondes`  

 }

}


查看完整回答
反对 回复 2023-07-20
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

您还可以使用Object.definePropertygetter/setter 动态定义对象属性,然后利用这些函数动态设置秒值。


seconds下面的代码片段将首先打印值为 1 的值,当seconds更改为 5 时,则记录的语句将打印为 5。


let seconds = 1;

const language_settings = {

   en: {

     NOTIFICATION: 'Send notification to my phone',

     

  },

  fr: {

    NOTIFICATION: 'Envoyer verification sur mon portable',      

 }

}


Object.defineProperty(language_settings.en, 'TIME_REMANING', {

  get : () => { return `Remaining time ${seconds} seconds`}

});

Object.defineProperty(language_settings.fr, 'TIME_REMANING', {

  get : () => { return `Temps restant ${seconds} secondes` }

  });



console.log(seconds, language_settings.en.TIME_REMANING, language_settings.fr.TIME_REMANING);


console.log('change second to 5');

seconds = 5;


console.log(seconds, language_settings.en.TIME_REMANING, language_settings.fr.TIME_REMANING);


查看完整回答
反对 回复 2023-07-20
?
守着一只汪

TA贡献1872条经验 获得超3个赞

一种快速而肮脏的方法是像这样定义字符串:“剩余时间 $0 秒”并在每次使用它时调用 .replace(“$0”, 秒) 。我知道一款名为 CS:GO 的流行游戏就是这样做的。

或者在 NPM 上找到一个做得更好的模板引擎

但 JS 字符串模板(反引号字符串)不是为此而设计的。您还可以使用接受值并返回生成的字符串的函数


查看完整回答
反对 回复 2023-07-20
  • 3 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信