猿问

在命名常量中间使用变量

我的语言设置可以替换应用程序中的字符串。为了避免魔术字符串,我定义了命名常量,但问题是我需要在其中注入一个变量。例如,


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;

当然,上面的代码由于未定义的“秒”变量而引发异常。另外,我不想仅仅因为这个就将字符串分成两部分。我可以在不做任何重大修改的情况下做到这一点吗?


www说
浏览 132回答 3
3回答

缥缈止盈

你可以让它们发挥作用: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`   }}

慕妹3242003

您还可以使用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);

守着一只汪

一种快速而肮脏的方法是像这样定义字符串:“剩余时间 $0 秒”并在每次使用它时调用 .replace(“$0”, 秒) 。我知道一款名为 CS:GO 的流行游戏就是这样做的。或者在 NPM 上找到一个做得更好的模板引擎但 JS 字符串模板(反引号字符串)不是为此而设计的。您还可以使用接受值并返回生成的字符串的函数
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答