说我有这样的模板文字:
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的那种功能!)。
答案 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
是“变量”部分。请注意,您必须手动连接字符串。