动态计算模板字面量

Evaluating template literals dynamically

本文关键字:计算 动态      更新时间:2023-09-26

模板文字如下:

const templateLiteral = `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的那种功能!)

最好的方法很明显,就是把题目给出的情况反过来。您只需要将模板文字包装在函数中,然后您将延迟计算,直到您传入所需的参数。就这么简单。

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]}`;
});

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

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包含"normal"line和values的标记是变量"部分。请注意,您必须手动连接字符串

我会调用eval,当使用模板字符串

时,您将评估代码。