[求助] 成员方法的名字在打包后变成空字符了...有救吗...?

引擎版本: 3.3.2

写了个切片函数…

public static aspect<T extends Function>(obj: object, fn: T, cb: T) {
    const key = fn.name;
    obj[key] = !cb ? undefined : obj[key] = function () { cb.apply(null, arguments); fn.apply(obj, arguments); }
}

没打包的时候测试是正常的…

public setOnTap(cb: Action): this { Utils.Js.aspect(this, this._onTap, cb); return this; }

但是打包之后的发现fn.name是空字符…
image
这个应该和打包时的设置有关吧…?
请问有没有可以运行时获取到fn.name的可能性呢…?
ps: 我也知道可以传字面量…不过这样对维护不友好…希望最好还是能运行时获取…


对比了预览和发布的js代码…应该是js压缩的时候移除的…

为了混淆和压缩代码都会缩减变量函数名,所以最好把 name 自己存储在原型链(prototype),@ccclass(“name”) 就有这样的作用,可以通过 cc.js.getClassName 获取设置的name

还是算了吧…这简直是人工反射了…

这是正解,不然原生平台是获取不到name的