首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态评估模板文字

动态评估模板文字
EN

Stack Overflow用户
提问于 2016-10-11 05:41:34
回答 3查看 5.1K关注 0票数 12

假设我有如下模板文字:

代码语言:javascript
复制
const templateLiteral = `string text ${expression} string text`

我希望动态地将模板文字计算成一个已完成的字符串。

代码语言:javascript
复制
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!)寻找这种功能。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-20 07:15:59

这样做的最佳方法是显而易见的,只需扭转问题给出的情况。您只需将模板文字包装在一个函数中,然后将评估延迟到传入所需的参数。就这么简单。

代码语言:javascript
复制
function evaluteTemplateLiteral(bar){
  return `foo ${bar} baz`;
}

现在,如果您想变得更时尚,您可以创建以下内容:

代码语言:javascript
复制
function evaluateGeneric(vals, fn){
   return fn.apply(null, vals);
}

您可以这样使用上面的内容:

代码语言:javascript
复制
evaluateGeneric(['brown','fox','cholo'], function(){
    return `the quick ${arguments[0]} fox ${arguments[1]}`;
});
票数 12
EN

Stack Overflow用户

发布于 2016-10-11 05:57:11

在这种情况下,带标记的模板字符串可能会有所帮助:

代码语言:javascript
复制
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是“变量”部分。请注意,您必须手动连接字符串。

票数 1
EN

Stack Overflow用户

发布于 2021-10-10 09:42:30

我只需要调用eval,在使用模板字符串时,您无论如何都是在计算代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39971088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档