我稍微重写了这里介绍的解决方案。
在此,
eval_template评估作为常规字符串提供的ES6模板字符串。模板字符串中使用的局部作用域中的任何变量都必须作为在第二个参数中传递的对象的属性来提供(因为使用创建的函数
Function在全局作用域中并且无法访问局部变量)。
危险地接近使用
eval。您可能希望选择其他方法来处理模板字符串。ES6模板字符串被设计为一种运行时机制,用于创建字符串文字,而不是模板语言可以存储和重用的模板语言。
function eval_template(s, params) { return Function(...Object.keys(params), "return " + s) (...Object.values(params));}const template = "`Welcome, ${user.name}`";console.log(eval_template(template, {user: {name: "James"}}));
只要将标记作为参数传递,就没有理由不能将其与带标记的模板字符串一起使用:
eval_template("tag`${boo}`", {tag, boo});
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)