假设我有如下模板文字:
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!)寻找这种功能。
发布于 2016-10-20 07:15:59
这样做的最佳方法是显而易见的,只需扭转问题给出的情况。您只需将模板文字包装在一个函数中,然后将评估延迟到传入所需的参数。就这么简单。
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]}`;
});发布于 2016-10-11 05:57:11
在这种情况下,带标记的模板字符串可能会有所帮助:
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是“变量”部分。请注意,您必须手动连接字符串。
发布于 2021-10-10 09:42:30
我只需要调用eval,在使用模板字符串时,您无论如何都是在计算代码。
https://stackoverflow.com/questions/39971088
复制相似问题