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


相关推荐

  • rtcm1005报文解析_rtcm1021-1027参数

    rtcm1005报文解析_rtcm1021-1027参数defparse_rtcm1005(rtcm1005):message_num=get_bin_para(rtcm1005[0:12],False,1,0)#协议idstation_id=get_bin_para(rtcm1005[12:24],False,1,0)#基站iditrf_year=get_bin_para(rtcm1005[24:30],False,1,0)#ITRF纪元22222gps_indicat.

    2025年6月2日
    4
  • 最新goland永久激活破解方法

    最新goland永久激活破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    81
  • java标识符有哪些_java标识符有哪些?java标识符有哪些不合法?

    java标识符有哪些_java标识符有哪些?java标识符有哪些不合法?问题:下面哪个标识符是合法的?”1HelloWorld””_HelloWorld””Hello*World””Hello$World”答案:4解析:标识符是以字母开头的字母数字序列:数字是指0~9,字母指大小写英文字母、下划线(_)和美元符号($),也可以是Unicode字符集中的字符,如汉字;字母、数字等字符的任意组合,不能包含+、-*等字符;不能使用关键字;大小写敏感拓展:1、java标识…

    2022年7月26日
    13
  • BAT机器学习面试1000题系列(详细版)

    BAT机器学习面试1000题系列(详细版)BAT机器学习面试1000题系列置顶2017年12月14日15:19:15阅读数:20913几点声明:1、本文的内容全部来源于七月在线发布的BAT机器学习面试1000题系列;2、文章中带斜体的文字代表是本人自己增加的内容,如有错误还请批评指正;3、原文中有部分链接已经失效,故而本人重新加上了新的链接,如有不当,还请指正。(也已用斜体标出)4、部分答案由于完全是摘抄自其它的博客,所以本人就只贴出答…

    2022年5月23日
    41
  • pycharm开头怎么写_pycharm代码自动提示

    pycharm开头怎么写_pycharm代码自动提示这样设置就可以保证我们每次创建新的脚本,头部都有提示。

    2022年8月26日
    8
  • android studio报错Gradle project sync failed. Please fix your project and try again

    android studio报错Gradle project sync failed. Please fix your project and try againAndroidStudio导入项目或者新建项目想运行的时候可能会报错Gradleprojectsyncfailed.Pleasefixyourprojectandtryagain,原因应该是Gradle的一些东西没配好。这2个版本必须要保证本地有,而且一定要对得上。怎么知道本地有没有,下面2张图片展示他们各自的路径。(默认路径在安装AndroidS…

    2022年7月15日
    19

发表回复

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

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