
#HarmonyOS NEXT体验官# TypeScript装饰器 原创 精华
一、前言
你如果正在从事或者学习鸿蒙开发,那一定在用装饰器。你如果熟悉注解,那你第一眼看到装饰器,你肯定会想装饰器是不是就跟注解一样?装饰器到底是什么?它有什么作用?本文将带你探究装饰器的秘密。
二、定义
装饰器就是一个方法或者函数,可以注入到类、方法、属性。大家请记住,装饰器就是一个函数,装饰器就是一个函数,装饰器就是一个函数。装饰器在不修改原有类、方法、属性的基础上添加额外的功能。常见装饰器:类装饰器、方法装饰器、属性装饰器、参数装饰器、元数据装饰器。
三、类装饰器
类装饰器用在类上面。当在类上使用装饰器,就会把类交给装饰器,装饰器就可以使用类。
3、1不带参的类装饰器
在上面的代码中,FirstClassDecorator是个函数,也就是装饰器,在Person类上使用@FirstClassDecorator来修饰。这样的话,Person类就交给了FirstClassDecorator装饰器,FirstClassDecorator函数中的targetClass就是Person,我们可以在FirstClassDecorator函数中创建Person对象,调用Person中的方法,可以获取类的名称,类的方法。
3、2带参的类装饰器
带参的类装饰器需要在FirstClassDecorator函数返回一个函数,在Person类中使用FirstClassDecorator需要传参。
以上就是类装饰器的使用,再次强调,装饰器就是个函数,我们可以自定义一个函数,在类上通过@函数名
的方式就实现了一个类装饰器。
3、3类装饰器原理
使用命令tsc命令可以将ts代码编译成js代码,下面的代码要求你有js基础,否则可能看不懂。
在上面的js代码中,注释写的很清楚了,大家对照注释更加容易理解。
四、方法装饰器
方法装饰器用在方法上面。
4、1方法装饰器用法
如下代码,方法装饰器的函数有三个参数,第一个参数是原型,方法时定义在原型上的,第二个参数是方法名,第三个参数是方法的数据属性。
4、2数据属性
上面提到了数据属性,如下代码,数据属性其实是个接口,我们注意下value字段,value代表被方法装饰器修饰的方法,我们可以调用value来执行被方法装饰器修饰的方法。
4、3方法装饰器原理
使用命令tsc命令可以将ts代码编译成js代码
与类装饰器不同的是,类装饰器调用__decorate
函数传了两个参数,方法装饰器调用__decorate
函数传了四个参数。第一个参数仍然是装饰器函数,第二个参数是原型,因为方法是定义在原型上的,第三个参数是方法名,第四个参数为空。参数的个数为4,说明是方法装饰器,获取方法的数据属性,执行方法饰器函数,最后还需要调用Object.defineProperty(target, key, targetInfo)
。为了实现拦截器功能,我们会修改数据属性的value,value就指向了新的方法,如果不调用 Object.defineProperty(target, key, targetInfo)
,原方法不会被执行。每次获取方法的数据属性,都会开辟一个新的空间,改变数据属性的value是在新的空间改变,原来的value不受影响。
五、属性装饰器
属性装饰器用在属性上面。
5、1属性装饰器用法
如下代码,属性装饰器的函数有三个参数,第一个参数是原型,第二个参数是属性名。
5、2属性装饰器原理
使用命令tsc命令可以将ts代码编译成js代码
属性装饰器调用__decorate
函数传了三个参数,第一个参数仍然是装饰器函数,第二个参数是原型,第三个参数是属性名。参数的个数为3,说明是属性装饰器,直接执行属性装饰器函数。
