uni-app 【报Bug】uts向js暴露函数和类,函数和类方法都有默认参数,无参调用函数正常,类方法报错

uni-app 【报Bug】uts向js暴露函数和类,函数和类方法都有默认参数,无参调用函数正常,类方法报错

开发环境 版本号 项目创建方式
Windows Windows 10 家庭中文版 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.99

手机系统:Android

手机系统版本号:Android 13

手机厂商:华为

手机机型:荣耀v30

页面类型:vue

vue版本:vue3

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

```javascript
export function test(p:string = "test"):void{  
    console.log(p);  
}  

export class Text{  
    constructor(){  

    }  
    classtest(p:string = "classtest"):void{  
        console.log(p);  
    }  
}
import { TTS , test,Text} from "@/uni_modules/ns-tts"  
test()  
new Text().classtest()

操作步骤:

export function test(p:string = "test"):void{  
    console.log(p);  
}  

export class Text{  
    constructor(){  

    }  
    classtest(p:string = "classtest"):void{  
        console.log(p);  
    }  
}
import { TTS , test,Text} from "@/uni_modules/ns-tts"  
test()  
new Text().classtest()

预期结果:

分别打印出“test”,“classtest”两个字符串

实际结果:

打印出“test”,接着就报错“Error: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1”


更多关于uni-app 【报Bug】uts向js暴露函数和类,函数和类方法都有默认参数,无参调用函数正常,类方法报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

一般来说,函数和类方法是差不多的,这差异有点大了

更多关于uni-app 【报Bug】uts向js暴露函数和类,函数和类方法都有默认参数,无参调用函数正常,类方法报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中使用 utsjs 暴露函数和类时,如果函数和类方法都有默认参数,无参调用函数正常,但类方法报错,可能是由于以下几个原因导致的:

1. 默认参数的解析问题

  • uts 中定义的默认参数在暴露给 js 时,可能存在解析不一致的问题。特别是在类方法中,js 可能无法正确识别 uts 中的默认参数。

2. 类方法的上下文问题

  • 类方法在 js 中调用时,可能会丢失 this 上下文,导致默认参数无法正确应用。确保在调用类方法时,this 指向正确的实例。

3. 类型转换问题

  • utsjs 之间的类型转换可能存在差异,特别是在处理默认参数时。确保 uts 中的默认参数类型与 js 中的预期类型一致。

4. 编译或运行时错误

  • 检查 uts 代码在编译或运行时是否有错误,特别是与默认参数相关的部分。确保 uts 代码在编译时没有警告或错误。

解决方案

1. 检查默认参数的定义

确保 uts 中的默认参数定义正确,并且在暴露给 js 时没有丢失或错误解析。

// UTS 代码
export function myFunction(param: string = "default") {
    console.log(param);
}

export class MyClass {
    myMethod(param: string = "default") {
        console.log(param);
    }
}

2. 确保 this 上下文正确

js 中调用类方法时,确保 this 指向正确的实例。

// JS 代码
const myInstance = new MyClass();
myInstance.myMethod(); // 确保 `this` 指向 `myInstance`

3. 显式传递参数

如果默认参数在 js 中无法正确应用,可以尝试显式传递参数。

// JS 代码
myFunction(); // 正常调用
myInstance.myMethod("explicit"); // 显式传递参数

4. 调试和日志

utsjs 中添加调试日志,检查默认参数在传递过程中的值是否正确。

// UTS 代码
export class MyClass {
    myMethod(param: string = "default") {
        console.log("UTS param:", param); // 调试日志
    }
}
// JS 代码
myInstance.myMethod();
回到顶部