使用ES6,我们可以创建"标记功能"它在模板字符串上运行。 是否可以调用"默认"标记函数来自另一个(即,在反引号之前没有前缀时使用的函数) e.g。
function html(template, ...substitutions)
{
substitutions= substitutions.map(s=>SafelyEscapeStringForHtml(s));
return DefaultTagFunction(template, ...substitutions);
}
其结果是我的标签功能不需要处理串联并确保将参数插入模板中的正确位置。 (当然这并不难,但它很难看,而且我不想在每个标签功能中看到它!)
答案 0 :(得分:1)
你自己的答案很接近 - 你可以滥用String.raw
给你你想要的东西(使用解释的转义序列):
function html(template, ...substitutions)
{
substitutions= substitutions.map(s=>SafelyEscapeStringForHtml(s));
return String.raw({ raw: template }, ...substitutions);
}
这实际上只是让人们认为转义解释的字符串是原始版本。
答案 1 :(得分:0)
String.raw()
是默认的标记函数
所以上面的代码可以写成
function html(template, ...substitutions)
{
substitutions= substitutions.map(s=>SafelyEscapeStringForHtml(s));
return String.raw(template, ...substitutions);
}