属性装饰器函数中获取类名称

ts中代码压缩后类名称会发生改变,比如说原始类名为:GamePlayData被压缩后可能变成了m

那么如何在代码被压缩的情况下在,保证属性装饰器中获取的类名是原始类名?

迷途1:直接使用target.constructor.name

image

迷途2:使用类装饰器
使用cocos自带的@ccclass或者自定义类装饰器如下所示:
image

上面的类装饰器也是行不通的。因为属性装饰器执行优先级高于类装饰器,属性装饰器调用时,类装饰器还未调用。
image

正解:使用静态属性。

image

输出代码:
image

运行结果如下公示:
image

上面是个人测试的结果,希望感兴趣的同学能验证下!!!

如有问题还望批评指正,万分感谢!

1赞

坐等看有没有更优雅的方式

js.getClassName

这个方法也有同样问题。

还是一样蛋疼,如果很多类都要用到类名,这样 cv 的时候 100% 会忘记修改,,

我目前就发现了这种方式,也许有更好的

获取类名 是为了做什么操作吗

image
gpt说的,不知道有没有用,,

比如说你想存储类名对应的数据,存到本地或者什么地方,压缩后,就不方便看了

这个很大可能有用,没试。如果这个好使,那么就省去了手动加静态属性的麻烦了。
这个配置看着应该是对所有类都不混淆类名称,如果所有类名称都不被混淆,那么这个还是弊端比手动加静态属性的弊端要大些。

image

我做的导表工具也出现过类似问题,最后直接把名字和类型注册到一个map解决了

这个我测试了下是可以的,是利用了微队列的延时吗?
image

image