今天我该如何使用装饰器?

2024-01-22

我看到今天已经在一些 javascript 代码中使用了装饰器。我的问题实际上有两个方面。

First:

如果装饰器还没有最终确定,今天怎么可能在生产代码中使用它们呢?浏览器支持会不会不存在?

Second:

鉴于今天可以使用它,正如一些开源项目所建议的那样,通常推荐的让装饰器工作的设置是什么?


你是对的,ES2016 装饰器还不是规范的一部分。但这并不意味着我们今天不能使用它。

首先让我们退后一步,回顾一下“什么是装饰器”。装饰器只是向对象添加行为的包装器。这在 javascript(或一般编程)中并不是一个新概念,它实际上已经存在了一段时间......

这是检查权限的装饰器的基本示例:

function AuthorizationDecorator(protectedFunction) {
    return function() {
        if (user.isTrusted()) {
            protectedFunction();
        } else {
            console.log('Hey! No cheating!');
        }
    }
}

使用它看起来像这样:

AuthorizationDecorator(save);

您会看到我们所做的只是简单地包装一些其他功能。您甚至可以通过多个装饰器传递一个函数,每个装饰器添加一个功能或运行一些代码。

你甚至可以找到一些旧文章 http://addyosmani.com/blog/decorator-pattern/解释 javascript 中的装饰器模式。

既然我们了解装饰器实际上是我们(javascript 社区)始终能够做到的事情,那么当我们今天使用 ES2016 装饰器时,它们只是被编译为 ES5 代码,这可能并不令人震惊,这就是为什么要保持浏览器兼容性。所以目前它只是语法糖(我可能会添加一些非常甜的糖)。

至于使用哪个编译器将 ES2016 代码转换为 ES5 代码,您有一些选择:Babel https://babeljs.io/ and Traceur https://github.com/google/traceur-compiler是最受欢迎的。

这是进一步阅读探索 ES2016 装饰器 https://medium.com/google-developers/exploring-es7-decorators-76ecb65fb841#.ku11ts7sj.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

今天我该如何使用装饰器? 的相关文章

  • 单独的数据间隔 bootstrap 轮播 4

    我想为 Bootstrap 4 轮播上的每张幻灯片设置单独的数据间隔 我尝试了一些其他的 javascript 片段 但是它们似乎不适用于我的代码 例如Bootstrap 4 轮播堆栈溢出 https stackoverflow com q
  • 将 next.js 与纱线工作区结合使用

    今天遇到了这样的项目结构的复杂情况 packages app pages package json ui kit pages package json shared babelrc package json root lvl 包 json
  • 将 Json 数据返回给 Ajax 调用

    我在 MVC 中有一个方法 我将其发布到它 并且我需要返回一些数据以进行处理 这是我发布到的 MVC 方法 返回值是 json 数据 HttpPost public JsonResult GetCalculateAmortizationSc
  • 在 Node.js 中包含另一个文件中的 JavaScript 类定义

    我正在为 Node js 编写一个简单的服务器 并且使用我自己的类 名为User看起来像 function User socket this socket socket this nickname null just the typical
  • 如何在单页应用程序中使用 #-URL?

    本文 http danwebb net 2011 5 28 it is about the hashbangs提出了一个非常令人信服的论点 因为 URL 是长期存在的 它们被添加书签并传递 所以它们应该是有意义的 并且使用哈希进行真正的路由
  • ES6 类文字中的 IIFE

    在 ES5 中我们都可以这样做 myClass prototype myMethod function return function 我可以对 ES6 类文字执行同样的操作吗 不 至少现在还没有 ES6 类仅支持声明方法 因此任何不直接为
  • 有没有办法将 Google 文档分割成多个 PDF?

    我想在 Google Scripts VBA 代码中复制我为 Word 文档编写的代码 基本上 它通过搜索我插入文档中的标签 将文档 切片 为多个 PDF 文件 目的是允许合唱团使用 forScore 管理乐谱的应用程序 在切片点插入先前注
  • Javascript - 使数组索引 toLowerCase() 不起作用

    我试图将所有数组索引设置为小写字符串 但它不起作用 我在这里查看了其他答案并尝试了他们的解决方案 例如使用toString 添加之前toLowerCase但它不起作用 这很奇怪 我创建了一个问题的jsfiddlehere https jsf
  • 从 ES6 模块导入函数表达式或函数声明有什么区别?

    据我了解 参见第 16 3 2 1 节 http exploringjs com es6 ch modules html ES6 允许函数 类导出操作数使用不同的语法 区别在于导出的函数是否需要在导入时解释为函数声明 在这种情况下 您可以编
  • Chrome 跨域 PATCH 请求不起作用

    我有一个带有 REST Api 的网站 现在我正在创建一个浏览器扩展 它将从某些页面收集数据并将它们发送回 REST Api 因为我希望我的扩展能够与 Firefox 和 Chrome 兼容 并且易于维护 所以我将实际代码作为脚本标记注入到
  • 预加载 javascript 和 css 文件

    我目前正在开发一个移动网站 该网站大量使用图像 CSS 和 JavaScript 例如 它使用未压缩的 150KB 的库 我为图像构建了一个预加载器 效果相当好 function loadImages images var sum 0 fo
  • Webpack - 资产大小限制中的警告:以下资产超出了建议的大小限制 (244 KiB)

    当我在生产模式下运行 webpack 时 有资产规模限制 超出 的警告 我怎样才能运行而不出现这个错误 在我的项目中 我包含 css 并且我看到 webpack 构建中包含一些 node module 目录 但是如果我排除 css 的 no
  • 带有桌子的嵌套表

    我在应用了表排序器的表中嵌套了表 它在嵌套表中添加了排序标题 但是它们没有对行进行排序 并且抛出了JavaScript错误 我想拥有 嵌套表不可排序 巢表上的排序实际上可以工作 但不是现状 您的第一个选择要容易得多 使嵌套表不可排序 像这样
  • 如何处理 setTimeout() 的多个实例?

    阻止创建 setTimeout 函数的多个实例 在 JavaScript 中 的最推荐 最佳方法是什么 一个例子 伪代码 function mouseClick moveDiv div 0001 mouseX mouseY function
  • 如何使用转义的 unicode 解码字符串?

    我不确定这叫什么 所以我在搜索时遇到了麻烦 如何使用 unicode 解码字符串http u00253A u00252F u00252Fexample com to http example com使用 JavaScript 我试过unes
  • Kendo 刷新 (DropDownList.refresh()) 不起作用错误未定义

    我试图在另一个 DropDownList 更改后刷新下拉列表 但 Refresh 方法未定义错误正在升级 我尝试再次读取数据源 它显示它正在加载 但数据仍然相同 帮助解决这个问题请 Code DropDownList1 change fun
  • 如何使用 API 中的数据填充选择的下拉元素 - ReactJS

    我对 React 还很陌生 我正在从 API 获取数据 当我检查控制台日志时可以看到数据 但是我不知道如何使用 map 创建一个新数组 然后选项元素可以使用该数组来显示货币代码 目前它填充下拉列表 但选项元素全部为空 结果显示为 NaN 下
  • 禁用移动设备上的锚点菜单点击

    我使用嵌套列表作为带有子菜单项的菜单 我曾经这样做过 如果您将鼠标悬停在主菜单项上 子菜单项将通过将显示从无更改为块来出现 我决定让子菜单看起来就像是下拉的 并使用了 CSS 过渡 我遇到的问题是 在第一种方法中 如果您触摸 iPad 上的
  • 使用 javascript 从亚马逊 URL 中抓取 ASIN

    假设我有一个像这样的亚马逊产品 URL http www amazon com Kindle Wireless Reading Display Generation dp B0015T963C ref amb link 86123711 2
  • 为什么 phantomjs 不能在 MacOS Sierra 中工作?

    我们正在使用phantomjs 1 9 1 macosx phantomjs 2 0 0 macosx哪一个工作得很好OS X 埃尔卡皮坦更新后macOS 塞拉利昂它会引发以下错误 phantomjs 1 9 1 macosx phanto

随机推荐

  • 如何在数组中查找对象并在 React 组件中显示它?

    我有数组cities与这样的对象 id 1 name New York id 2 name London 我的值为id 我将数组中的元素 名称 放入选择列表 但我需要添加第一个选项 其中包含数组 名称 中的值 该选项具有相应的 id 但我无
  • 带 Cron 作业的 Laravel 调度程序

    我正在使用 laravel 5 1 和 php5 我尝试创建我的 cron 作业来及时删除未付发票 但我测试它以打印用户日志以帮助我知道该作业正在运行 这是我的应用程序 Console Kernel php protected comman
  • 从 PNG 图像或 Java 面板创建 PDF

    我正在寻找一个可以获取图像 PNG 并创建 PDF 的 Java 库 或者直接从已绘制的java面板创建PDF 您可以使用 Gnostice PDFOne for Java 来实现此目的 http www gnostice com PDFO
  • System.IO.Directory.CreateDirectory 仅具有当前用户的权限?

    我希望 asp 应用程序创建一个只能访问该应用程序运行所用的帐户 即 asp 帐户 的文件夹 我其实想用this one http msdn microsoft com en us library 9h4z99zb aspx 但我不知道如何
  • 根据显示的片段替换工具栏布局

    我有一个带有导航抽屉的活动 它替换了活动上的 main fragment container 当显示其中一个片段时 我想更改工具栏的布局并向其添加一个微调器 并在片段隐藏时将其删除 我的布局看起来像这样
  • 如何保持变量和包含它的字典一致?

    我有一个变量 self foo 1 还有一本字典 self foo dict foo key self foo 我希望能够改变self foo并让它也改变self foo dict 如果这是在 C 中 并且字典是一个结构 我只会使用指针 有
  • 当缓冲区中有几个文件退出时 vim 崩溃

    我识别具有某些特征的文件并将它们拍摄到 vim 会话中 例如 grep rl a z xargs vim 除了警告之外 这有效 我在 vim 中打开了 7 个文件 一一编辑它们 使用 w等结束了 bn用于转到下一个文件 在我的会议结束时我做
  • 如何将 PowerShell 树输出到文本或 Excel 文件

    我有以下代码 readPath C FirstFolder writePath C SecondFolder Function Recurse folder lvl Get ChildItem Path folder File ForEac
  • 即使我关闭应用程序,我的 Android 应用程序中的背景音乐服务也会继续播放

    我正在使用后台服务在我的应用程序的所有活动中运行背景音乐 问题是 当应用程序运行时 它工作正常 但当我关闭它时 它会继续播放音乐 直到我从设备上卸载它 您认为这里的问题是什么 这是我的后台服务中的代码 Created by Naira on
  • ASP.NET 应用程序 - 设置 IE7 兼容模式?

    在 ASP NET 应用程序中设置 IE7 兼容模式来处理 IE8 问题的最简单方法是什么 是否可以通过 web config 进行设置 还是必须在 IIS 或页面级别进行设置 添加标题 X UA Compatible IE Emulate
  • 如何制作像 Stackoverflow 中那样的投票赞成或反对按钮?

    Problems 如何制作一个 Ajax 按钮 向上和向下箭头 使得数字可以增加或减少 如何将用户的操作保存到变量 Number Of Votes Of QuestionID 我不确定是否应该使用数据库作为变量 不过 我知道还有一种更简单的
  • 使用 php 创建 3 位毫秒

    我有 13 位数字 想要创建包含毫秒的日期和时间 示例代码是这样的这是我的 php 脚本 mil 1328910295939 seconds mil 1000 showdate date Y m d H i s seconds echo s
  • 通过 itext pdf 库进行图像旋转

    我无法通过在java程序中使用itext pdf库从中心或任何固定点旋转图像 当我旋转图像时 它的x和y坐标会发生变化 请在这方面帮助我 Image pdfImage Image getInstance assets product png
  • 通过 JDBC 显示多列索引的列名

    有谁知道如何获取跨多个列的索引的列名 请参阅SQL via JDBC 我确实知道如何获取所有索引列 请参阅代码 但这样我就无法看到哪些列链接到单个索引 CREATE TABLE IF NOT EXISTS foo id int 11 NOT
  • CSS3 Flexbox 布局一行最多 3 个子项目

    在将下一个子元素推入新行之前 CSS 中是否有一种简单的方法可以在同一行上拥有固定的最大子项数 据我了解 Flexbox 如果子项目在其上方的行上没有足够的可用空间 则只会将其推入新行 但我正在寻找一个 CSS 规则或函数 让我说 我希望任
  • 将用户表单复制到另一个工作簿

    我已经寻找过这个问题的答案 但找不到任何与我正在寻找的内容完全匹配的内容 如果有人有答案或可以为我指出一个可以回答这个问题的方向 那就是非常感激 我曾讨论过构建一个将数据输入工作簿的解决方案并已成功构建它 但是需要添加到的工作簿是一个非常活
  • 如何使用现代版本的 CodePipeline 进行 S3 部署

    我正在尝试使用最新版本的 AWS CDK for typescript 1 128 设置一个全新的管道 管道的创建非常简单 我已经添加了源代码和构建阶段 没有任何问题 这里的目标是自动部署静态登陆页面 到目前为止我有这段代码 const l
  • ASP.NET Core 5 既不尊重 JsonConverter 也不尊重 TypeConverter

    标题是非常不言自明的 ASP NET Core 5 既不尊重 JsonConverter 也不尊重 TypeConverter 符号例如 TRX USDT 应该被分割 并转换为new Symbol TRX USDT 因为我已经这样做了 基本
  • 比较数组时难以填充列表

    在下面我想使用 GetUsersRole 但对显示的部分有困难 我想将 Roles 值与 usersRole 进行比较 如果 Role usersRole 则 UserRole true 否则为 false 基本上我想要这样的结果 用户1
  • 今天我该如何使用装饰器?

    我看到今天已经在一些 javascript 代码中使用了装饰器 我的问题实际上有两个方面 First 如果装饰器还没有最终确定 今天怎么可能在生产代码中使用它们呢 浏览器支持会不会不存在 Second 鉴于今天可以使用它 正如一些开源项目所