”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 模板文字可以重用且动态吗?

模板文字可以重用且动态吗?

发布于2024-11-09
浏览:351

Can Template Literals Be Reusable and Dynamic?

可重用模板文字:暴露隐藏的潜力

虽然 ES6 中的模板文字被广泛使用,但人们仍然认为它们永远与它们创建的那一刻,缺乏重用和动态更新的灵活性。本文挑战了这一概念,探索将模板文字转换为可重用的动态文档的可能性。

传统模板的本质在于能够在运行时注入令牌,并在必要时进行评估。然而,ES6 模板文字似乎在声明时评估它们的替换,限制了它们的实用性。

基本催化剂:函数构造函数

为了克服这个明显的限制,我们使用 Function 构造函数作为中介。通过利用这个构造,我们可以推迟插值过程,直到调用函数:

const templateString = "Hello ${this.name}!";
const templateVars = {
  name: "world",
};

const fillTemplate = function (templateString, templateVars) {
  return new Function(
    "return `"   templateString   "`;"
  ).call(templateVars);
};

console.log(fillTemplate(templateString, templateVars));

在此示例中,fillTemplate 函数接受模板字符串和一组要插值的变量。在该函数中,我们构造一个函数,该函数在执行时返回模板字符串,其中包含运行时注入的 templateVar 的值。

可重用模板文字的好处

The生成的可重用模板文字具有许多优点:

  • 动态插值:可以在运行时将值插值到模板中,从而提供更大的灵活性。
  • 外部插值:模板可以来自外部文件,方便维护和协作。
  • 扩展功能:可以通过一些独创性集成模板标签等附加功能。

虽然此解决方案引入了某些限制,例如无法内联 JavaScript 逻辑,可以开发变通方法。

结论

通过使用 Function 构造函数,我们释放了 ES6 模板文字的真正潜力。我们将它们从静态字符串转换为可重用的动态模板,为代码组织和灵活性开辟了新的可能性。虽然完全重新创建传统模板引擎功能的旅程仍在继续,但该技术为扩展模板文字的功能提供了坚实的基础。

最新教程 更多>
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-11-16
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-16
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-11-16
  • 如何在 SQL 中计算某个值的总和,同时确保每行只计算一次?
    如何在 SQL 中计算某个值的总和,同时确保每行只计算一次?
    在 SQL 中使用 SUM() 对不同值进行分组在 MySQL 查询中,您想要计算以下值的总和转换表,同时确保每行仅计算一次。为了实现这一点,您需要将 DISTINCT 关键字与 SUM() 函数结合使用。但是,您遇到了重复行导致 SUM() 结果膨胀的问题。要解决此问题,请考虑表中的主键关系。如果...
    编程 发布于2024-11-16
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-16
  • Vite中环境变量的处理
    Vite中环境变量的处理
    在现代 Web 开发中,管理敏感数据(例如 API 密钥、数据库凭据以及不同环境的各种配置)至关重要。将这些变量直接存储在代码中可能会带来安全风险并使部署复杂化。 Vite,一个现代的前端构建工具,提供了一种通过.env文件管理环境变量的简单方法。 什么是 .env 文件? .env 文件是一个简单...
    编程 发布于2024-11-16
  • 如何使用 Django REST Framework 高效处理嵌套序列化器中的外键分配?
    如何使用 Django REST Framework 高效处理嵌套序列化器中的外键分配?
    Django REST Framework 中的嵌套序列化器的外键分配Django REST Framework (DRF) 提供了一种管理外键关系的便捷方法序列化数据。然而,在嵌套序列化器中获得所需的行为可能具有挑战性。嵌套序列化器中的外键分配嵌套序列化器继承其父序列化器的行为。默认情况下,它们不...
    编程 发布于2024-11-16
  • 如何从 CodeIgniter URL 中删除“index.php”?
    如何从 CodeIgniter URL 中删除“index.php”?
    CodeIgniter .htaccess 和 URL 重写问题导航 CodeIgniter 应用程序通常需要从 URL 中删除“index.php”,以允许用户访问具有更清晰语法的页面。不过,新用户在这个过程中可能会遇到困难。删除“index.php”的关键在于修改应用程序配置文件(applica...
    编程 发布于2024-11-16
  • 您可以在 `` 标签内嵌套更多的 `` 元素吗?
    您可以在 `` 标签内嵌套更多的 `` 元素吗?
    不常见的 HTML 结构: 可以容纳 以外的标签吗?在 HTML 世界中,嵌套标签可以创建复杂的结构。然而,某些标签的放置有时会受到限制。以神秘的 标签为例,许多人认为它只能嵌套 元素。深入研究:您的询问源于探索标签是否有效的愿望除了 之外的其他人都可以在 中找到一个家。为了揭开这个概念的...
    编程 发布于2024-11-16
  • 如何使用 XPath 条件选择 XML 文档中的特定节点?
    如何使用 XPath 条件选择 XML 文档中的特定节点?
    利用 XPath 条件选择节点通过 XPath 导航 XML 文档时,通常需要根据特定条件限制检索的节点。在此示例中,我们的任务是根据日期属性有选择地检索节点。以下 XPath 表达式从提供的 XML 文档中检索所有 节点:$nodes = $xml->xpath('//xml/events...
    编程 发布于2024-11-16
  • 为什么“margin: auto”不能与绝对定位的元素一起使用?
    为什么“margin: auto”不能与绝对定位的元素一起使用?
    了解绝对定位边距自动问题当将“position:absolute”应用于具有“margin-left:auto”和“的元素时margin-right: auto”,您可能会注意到边距似乎没有效果。此行为不同于“位置:相对”,其中边距按预期工作。为了理解这种差异,让我们更深入地研究底层机制。当一个元素...
    编程 发布于2024-11-16
  • Go 如何处理方法中的指针和值接收者?
    Go 如何处理方法中的指针和值接收者?
    Go 指针:接收者和值类型在 Go 中,指针对于理解面向对象编程和内存管理是必不可少的。在处理指针时,掌握方法中接收器类型之间的区别至关重要。您提供的 Go Tour 示例说明了这个概念:type Vertex struct { X, Y float64 } func (v *Vertex)...
    编程 发布于2024-11-16
  • 如何从 Python 中的字符串列表创建多个变量?
    如何从 Python 中的字符串列表创建多个变量?
    如何从字符串列表创建多个变量? [重复]许多编程场景要求我们同时操作多个对象或变量。一个常见的挑战是从字符串列表创建多个变量,其中每个变量的名称与列表中的相应元素匹配。在 Python 中,您可以使用字典理解来完成此操作:names = ['apple', 'orange', 'banana'] f...
    编程 发布于2024-11-16
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1和$array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求是构...
    编程 发布于2024-11-16
  • 外键可以引用多态关联中的多个表吗?
    外键可以引用多态关联中的多个表吗?
    多态外键:一个外键可以引用多个表吗?关系数据库中外键的概念通常涉及指定确切的目标参考列应指向的表。然而,在处理多态关联时,其中一个表与一组中的多个其他表有关系,就会出现问题:是否可以有一个可以引用这些表中任何一个表的外键?答案:否在MySQL和PostgreSQL中,外键约束只能引用单个父表。此约束...
    编程 发布于2024-11-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3