当前位置: 首页 > news >正文

【es6 】中的装饰器 decorator 到底是什么,有什么用,和ts 中的装饰器decorator有啥区别

es6 中的装饰器 decorator

再 es6 中新增了 3个器,分别是 迭代器、生成器、还有就是装饰器,关于迭代器和生成器可以参考这篇文章。​​​​

装饰器实际上是 es7 提出来的,它允许你在类、类方法、类属性等声明前面添加特殊的修饰符,以此来修改他们的行为。

  1. 装饰器是一个特殊的声明,语法是 @<函数名>,函数名的这个函数需要有具体实现
  2. 装饰器通常用来修改或扩展类,类方法,类属性
  3. 装饰器是一个函数
  4. 装饰者模式就是一种在不改变原类和使用继承的情况下,动态地扩展对象功能的设计理论。
  5. 只针对类
  6. 接收一些参数并返回一个函数,或执行一些操作
  7. 再运行时被调用,用来处理目标对象并返回一个新的对象,从而实现对目标对象的修改或增强
  8. 可以被用来
    1. 添加元数据
    2. 修改函数行为
    3. 实现面向切面编程
  9. 还只是一个草案 stage 2,所以在 mdn 官方文档搜不到
  10. 用法
    1. 类的装饰
      1. 在 class 上面加一行代码就行
      2. 接收一个参数,即类本身
      3. 如果要传递参数,可以在装饰器外层再封装一层函数
    2. 类属性/类方法装饰
      1. 能够接受三个参数
        1. 类的原型对象
        2. 需要装饰的属性名
        3. 装饰属性名的描述对象
    3. 装饰器不能用于修饰函数,因为函数存在变量声明

ts 中的装饰器

es6 中的decorator 还只是草案,不能直接使用,但是可以使用 js 工具链(babel, TypeScript 等)实现装饰器。所以在 ts 中可以使用装饰器。

TypeScript 中的装饰器和 JavaScript 中的装饰器本质上是相同的,都是用来修改或者增强类、方法、属性或函数等的功能。它们的语法和基本概念是相似的。

官网文档

ts 中的装饰器可以附加到

  1. 类声明
  2. 方法
  3. 配件
  4. 特性
  5. 参数

也是指针对类和类属性和类方法的

相关文章:

  • 包装类详解
  • FPS游戏之漫谈Shader.globalMaximumLOD
  • 【Elasticsearch专栏 18】深入探索:Elasticsearch核心配置与性能调优 保姆级教程 企业级实战
  • 【Antd】Form 表单获取不到 Input 的值
  • DataGear制作基于three.js的3D数据可视化看板
  • 提升Vue3应用效率的秘诀:深入比较ref与reactive!
  • ubuntu 安装jdk8
  • C语言中的套娃——函数递归
  • 【力扣白嫖日记】178.分数排名
  • 基于JavaWeb实现的校园新闻发布系统
  • 国产替代MATLAB的征途
  • 推荐收藏!科大讯飞算法岗(NLP 方向)面试题7道(含答案)
  • pytest基本应用
  • 网络安全与信创产业发展:构建数字时代的护城河
  • BFS中的多源BFS-双端队列BFS
  • @angular/forms 源码解析之双向绑定
  • [译] 怎样写一个基础的编译器
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 2017-08-04 前端日报
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript 一些 DOM 的知识点
  • javascript面向对象之创建对象
  • October CMS - 快速入门 9 Images And Galleries
  • Web设计流程优化:网页效果图设计新思路
  • 从零开始的无人驾驶 1
  • 精彩代码 vue.js
  • 聊聊sentinel的DegradeSlot
  • 前端性能优化--懒加载和预加载
  • 什么软件可以剪辑音乐?
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微服务入门【系列视频课程】
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​secrets --- 生成管理密码的安全随机数​
  • #stm32驱动外设模块总结w5500模块
  • (rabbitmq的高级特性)消息可靠性
  • (二十四)Flask之flask-session组件
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)平衡树
  • (转)重识new
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core 2.1路线图
  • .net(C#)中String.Format如何使用