动态评估模板文字

时间:2016-10-11 05:41:34

标签: javascript node.js

说我有这样的模板文字:

const val = `string text ${expression} string text`

我想动态地将模板文字评估为完成的字符串。

function toFoo(templateLiteral){
   //returns "string text Foo string text"
   return templateLiteral.evaluate('Foo');  
}

function toBar(templateLiteral){
  //returns "string text Bar string text"
   return templateLiteral.evaluate('Bar');  
}

function toBaz(templateLiteral){
   //returns "string text Baz string text"
   return templateLiteral.evaluate('Baz');  
}

有没有办法用模板文字做这样的事情,还是我只是愚蠢? (template.evaluate()是一个组合函数,但我正在寻找JS的那种功能!)。

2 个答案:

答案 0 :(得分:3)

我认为这样做的最佳方式非常明显,只需改变问题所给出的情况。 您只需将模板文字包装在函数中,然后您将延迟评估,直到您传入所需的参数。就这么简单。

function evaluteTemplateLiteral(bar){
  return `foo ${bar} baz`;
}

现在,如果你想获得更好的,你可以创建:

function evaluateGeneric(vals, fn){
   return fn.apply(null, vals);
}

你会像上面那样使用上面的内容:

evaluateGeneric(['brown','fox','cholo'], function(){
    return `the quick ${arguments[0]} fox ${arguments[1]}`;
});

答案 1 :(得分:0)

标记的模板字符串可以在这种情况下提供帮助:

function toFoo(strings, ...values) {
    console.log(strings[0]); // string text
    console.log(strings[1]); // string text
    console.log(values[0]);  // <your-passed-expression>

    // TODO: Do your manipulation
}

const val = toFoo`string text ${expression} string text`;

strings包含该行的“正常”标记,values是“变量”部分。请注意,您必须手动连接字符串。