javascript 中通用模板文字函数的标记

Tag for generic template literal function in javascript

我的目标是编写一个像

这样的标记模板函数
myTemplateTagFunction`some text ${variable} etc. etc.`

...其行为类似于 javascript 中的默认模板文字函数。

我的第一次尝试是

let myTaggedTemplate = args => `${args}`

但这很快就坏了...

> myTaggedTemplate`hello world ${2 + 5}`
// "hello world ,"

> `hello world ${2 + 5}`
// "hello world 7"

一定有更简单的方法来做到这一点,但我没有找到吗?

您需要更改函数:

let myTaggedTemplate = (strings,...values) => ...;

并尝试按照 this link

中的示例进行操作

也许还有更短的方法,但这是我的方法:

const myTaggedTemplate = (strings, ...vars) => {
    let result = '';
    strings.forEach((str, i) => {
        result += `${str}${i === strings.length - 1 ? '' : vars[i]}`;
    });
    return result;
};

如何定义标记模板函数

如果您定义一个标记模板函数,它必须接收一个字符串数组作为第一个参数,并接收任意数量的表达式作为后续参数。这些字符串都是您插入的表达式之间的字符串(在所有 ${...} 之间),所有表达式都是您放入 ${...}.

中的值

示例代码

let numExp = 2;

function tagFunction(strings, ...expressions) {
  let returnString = "";
  for (let i = 0; i < expressions.length; i++) {
    returnString += strings[i] + expressions[i];
  }
  returnString += strings[strings.length - 1];
  return returnString;
}

console.log(
  tagFunction`Using function \"${tagFunction.name}\" with ${numExp} expressions`
);