4

我的目标是编写一个标记模板函数,例如

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"

必须有一种更简单的方法来做到这一点,我错过了?

4

3 回答 3

4

可能有更短的方法可以做到这一点,但这是我的方法:

const myTaggedTemplate = (strings, ...vars) => {
    let result = '';
    strings.forEach((str, i) => {
        result += `${str}${i === strings.length - 1 ? '' : vars[i]}`;
    });
    return result;
};
于 2020-10-10T21:59:11.303 回答
0

你需要改变你的功能:

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

并尝试按照此链接中的示例进行操作

于 2020-10-10T21:45:51.097 回答
0

如何定义标记模板函数

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

示例代码

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`
);

于 2020-10-10T22:07:25.793 回答