微信小游戏构建后怎么正确获取constructor.name

小游戏构建后脚本被混淆压缩了,导致获取不到正确的类名,有什么办法获取类名或者产生一个唯一的键值或者怎么关闭代码压缩。

构建时打开调试模式就是不压缩的。

1赞

你好,调试模式确实没压缩,在研究下看看在哪设置正式包不压缩代码,或者能不能获取类型的一个键值。

使用 @ccclass("XXX")

2赞

cc.js.getClassName

1赞

非常感谢

被ccclass装饰的类,可以使用cc.js.getClassName来获得真实类名,也可以使用cc.js.setClassName设置,然后再get

业务逻辑不要依赖类名

分享一下我的经验。一开始我在做对象序列化的时候,用的就是constructor.name来当key。然后就遇到了你同样的问题,混淆后,所有类名全是a,b,c之类的。
所以我就不用name,而用constructor,这是一个function类型,可以拿来当key,但是不能保存。也不需要保存,做一下类型映射就可以了。

我这里需要用类名来做键值,方便获取某种类型的对象。现在我是在定义完类型后用cc.js.setClassName将类名设置为原类名了。

我也有用到类名作为key,我直接用cc.js.getClassName来获取的,没做别的操作,打包后也是正确的

因为你是获取的继承自cc.component的组件,并且有ccclass装饰器吧。

对,是继承自cc.component的组件

这种方法有点剑走偏锋,能用吗?

你使用之前可以先看一下自己的代码,有没有存储key的需求,如果你都不需要存储,那使用constructor来当key是最安全的。

可以可以,对js不是很熟悉,不知道js各种底层原理,不了解constructor会不会被覆盖,多谢指教 :heart_eyes: