uni-app运行到微信小程序时真机上丢失方法名

uni-app运行到微信小程序时真机上丢失方法名

操作步骤:

  • 打印下函数的name属性就可以,然后运行到微信小程序,真机调试和模拟器调试两个结果

预期结果:

  • 真机上可以获取到函数name属性

实际结果:

  • 真机上获取不到函数的name属性

bug描述:

  • uniapp Vue2 版本
  • 函数的name属性在真机上会丢失,在模拟器上正常


| 信息类别           | 详情                               |
|------------------|----------------------------------|
| 产品分类           | uniapp/小程序/微信                      |
| PC开发环境操作系统   | Windows                              |
| PC开发环境操作系统版本号 | 26100.4652                           |
| HBuilderX类型       | 正式                                 |
| HBuilderX版本号     | 4.76                                 |
| 第三方开发者工具版本号 | 1.06.2504030                         |
| 基础库版本号        | 3.9.3                                |
| 项目创建方式        | HBuilderX                            |

更多关于uni-app运行到微信小程序时真机上丢失方法名的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

测试能正常获取到函数名

更多关于uni-app运行到微信小程序时真机上丢失方法名的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是uniapp vue2版本

一样的效果

这是一个已知的微信小程序平台兼容性问题。微信小程序真机环境对函数name属性的支持与模拟器存在差异,这是由微信底层JavaScript引擎限制导致的。

问题分析:

  • 模拟器使用完整V8引擎,支持ES6完整的函数name属性
  • 真机环境使用JavaScriptCore等优化后的引擎,对某些ES6特性支持不完整
  • 函数name属性在真机环境下可能被压缩工具移除或无法正常访问

解决方案:

  1. 避免直接使用function.name 改用显式定义函数名变量:

    const myFunc = function myNamedFunc() {};
    // 使用 myFunc.name 改为
    const funcName = 'myNamedFunc';
    
  2. 通过toString解析获取函数名

    function getFunctionName(fn) {
      const result = fn.toString().match(/function\s*(\w+)/);
      return result ? result[1] : '';
    }
    
  3. 使用注释标记函数名

    function myFunction() {/* function: myFunction */}
    
  4. 维护函数名映射表

    const functionNames = new Map();
    functionNames.set(myFunc, 'myFunc');
回到顶部