装饰器 (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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 校验json格式的工具_校验码计算工具

    校验json格式的工具_校验码计算工具在线JSON格式化校验工具

    2025年7月7日
    1
  • oracle中varchar和char的区别_char跟varchar

    oracle中varchar和char的区别_char跟varchar1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,大部分情况下建议使用varchar2类型,可以保证更好的兼容性。注意:在oracle中varchar2的最大长…

    2025年7月24日
    1
  • 部署和使用kibana

    部署和使用kibana

    2021年11月26日
    31
  • SpringBoot跨域设置(CORS)「建议收藏」

    SpringBoot跨域设置(CORS)「建议收藏」目录什么是跨域跨域资源共享(CORS)1.简单请求2.非简单请求SpringBoot设置CORS1.配置过滤器CorsFilter2.实现接口WebMvcConfigurer3.使用注解@CrossOrigin什么是跨域请求url的协议、域名、端口三者有任意一个不同即为跨域。跨域问题是因为浏览器的同源策略的限制而产生的。同源:请求url的协议、域名、端口三者都相同即为同源(同一个域)。同源策略:同源策略(Sameoriginpolicy)是一种约定,他是浏览器最核心也最基本的安全

    2022年6月18日
    23
  • 毕业四年

    好久不见,一年一度的“毕业N年”系列,2019,毕业四年了。工作去年9月份从前公司离职了,加入阿里,很快,再两个月就入职一年了。几条工作上的感受和建议,希望对你有所帮助。1、谨慎面试,大厂永远在招人以阿里为例,你的所有面试记录都是留存的,包括每个面试官的评价以及结果,如果准备不充分的情况下频繁面试,留下的记录会影响之后面试官对你的印象。如果对某个岗位感兴趣,最好联系对应岗位部门的同学,简历…

    2022年3月11日
    44
  • jqueryajax实例代码_什么叫实例

    jqueryajax实例代码_什么叫实例Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了。推荐一篇不错的jQueryAjax实例文章,忘记了可以去看看,地址为:http://www.cnblogs.com/yeer/archive/2009/07/23/1529460.html和http://www.w3school.com.cn/jquery

    2022年8月16日
    6

发表回复

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

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