装饰器 (Decorator)

装饰器 (Decorator)装饰器 Decorator 是 个函数 用来修改类的行为 装饰器对类的行为的改变 是编译时发生的 而不是在运行时 作用 是 种动态地往 个类中添加新的行为的设计模式 它可以在类运行时 扩展 个类的功能 并且去修改类本身的属性和方法 使其可以在不同类之间更灵活的共用 些属性和方法 装饰器本庚就是编译时执行的函数 decoratorcla 等同于 classA A decorator A A 装饰类 testable 就是 个

装饰器(Decorator)是—个函数,用来修改类的行为。装饰器对类的行为的改变, 是编译时发生的,而不是在运行时。 

作用:是—种动态地往—个类中添加新的 行为的设计模式, 它可以在类运行时,扩展—个类的功能,并且去修改类本身的属性和方法,使其可以在不同类之间更灵活的共用—些属性和方法。

//装饰器本庚就是编译时执行的函数 @decorator class A{} //等同于 class A{} A = decorator(A) || A;

装饰类

//@testable就是—个装饰器。 它修改了MyClass这个类的行为,为它加上了静态属性 inTestable。 //装饰器函数的第—个参数target, 就是需要装饰的目标类。 function testable(target){ target.inTestable = true; } @testable class MyClass{} console.log(MyClass.inTestable); // true 
//通过装饰器mixins, 把Foo类的方法添加到了MyClass的实例上面 // mixins.js export function mixins(…list) { return function (target) { Object.assign(target.prototype, …list) } } //main.js import { mixins } from'./mixins' const Foo = { foo(){ console. log('foo'); } } @mixins(Foo) class MyClass{} let obj = new MyClass(); obj.foo();

装饰类的属性\方法 

类似Object.defineprototype()方法。它接收三个参数target, name , descriptor。 第—个target是所要装饰的目标对象,第二个name是所要装饰的属性名,第三个descriptor是该属性的描述对象。 Decorator在babel的情况下对成员属性的动态修改实际上是通过defineProperty实 现的。如果被装饰的成员是函数,则第三个参数的value字段表示这个函数本身。

//日志输出装饰器 function log(target,name,descriptor){ console.log(Date.now()); } class Car { @log run(){ console.log{'Car is running'); } } const c1 = new Car(); c1.run(); //64 //Car is running
//属性只读装饰器 class Person { @readonly name() { return `${this.first} ${this.last}` } } function readonly(target, name, descriptor) { //descriptor对象原来的借如下 //{ // value: speci什edFunction, II enumerable: false, // configurable: true, // writable: true //}; descriptor.writable = false; return descriptor; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233557.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vmware vcenter 6.7安装_微信老版本6.0安装包

    vmware vcenter 6.7安装_微信老版本6.0安装包几个不同的组件vCenterServer:对ESXi主机进行集中管理的服务器端软件,安装在windowsserver2008R2或以上的操作系统里,通过SQL2008R2或以上版本的数据库(其他数据库也有版本要求)维护数据中心里各功能组件的信息。其实体形态是.iso文件,可在物理或虚拟Windows桌面上安装。链接:链接:https://pan.baidu.com/s/1zB…

    2022年9月14日
    2
  • 记录一次C#使用JWT单点登录

    记录一次C#使用JWT单点登录好久没更新了,最近确实比较忙,现在弄完后,第一时间来记录一下最近学到的一些东西JWT单点登录一、简单介绍 JWT全称是JSONWebToken,是一种是目前最流行的跨域身份验证解决方案。为了网络应用环境间传递声明而执行的一种基于JSON的开发标准(RFC7519),该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,该token也可直接被用于认证,也可被加.

    2022年5月20日
    70
  • Burp_suite安装及使用教程(专业版)

    Burp_suite安装及使用教程(专业版)1、工具下载地址:https://down.52pojie.cn/Tools/Network_Analyzer/Burp_Suite_Pro_v1.7.37_Loader_Keygen.zip工具运

    2022年6月30日
    28
  • URL转发_免费URL转发

    URL转发_免费URL转发所谓URL转发,是通过服务器的特殊设置,将访问您当前域名的用户引导到您指定的另一个网络地址。  地址转向(也可称“URL转发”)即将一个域名指向到另外一个已存在的站点,英文称为“URLFORWARDING”。域名指向可能这个站点原有的域名或网址是比较复杂难记的。如何设置域名URL转发  1、在左边菜单中点击“域名管理”链接。  2、点选用户曾经注册并将要设置的域名,点击左侧

    2022年10月19日
    2
  • 网页连接opc服务器,远程连接opc服务器

    网页连接opc服务器,远程连接opc服务器远程连接opc服务器内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。远程连接opc服务器相关内容使用Mac版MicrosoftRem…

    2022年6月20日
    28
  • CTK插件框架学习3-第一个插件编写

    CTK插件框架学习3-第一个插件编写前两章把CTK插件库编译好了,这里篇编写一个插件试一下,共需要创建两个小工程,一个是插件库,一个是测试程序。1.插件库编写1.1创建工程打开Qtcreator,新建一个EmputyqmakeProject,并给工程命名为ctk-plugin-first。Kits选择”DesktopQt5.12.3MSVC201764bit”。更改ctk-plugin-first.pro文…

    2022年5月18日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号