HarmonyOS鸿蒙Next中ArkTS如何调用JavaScript代码(非web)
HarmonyOS鸿蒙Next中ArkTS如何调用JavaScript代码(非web) 项目中有些算法代码是JavaScript写的,想着可以直接拷过来复用,让arkts调用这些js代码(不通过web而是直接调用)。
比如我有js代码中有类Geometry:
export class Geometry {
getArea() {
return 0.1
}
}
arkts代码中有Polygon_类:
import { Geometry } from "js_library";
export class Polygon_ extends Geometry {
cal(): number {
return this.getArea() * 2
}
//这里必须重写??
getArea(): number {
return super.getArea();
}
}
我发现在Polygon_中必须重写getArea,不然会编译报错:Property ‘getArea’ does not exist on type ‘Polygon_’。
所以arkts直接调用js有什么详细的规则和限制吗?
更多关于HarmonyOS鸿蒙Next中ArkTS如何调用JavaScript代码(非web)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
先说解决方法:
```javascript
export class Polygon_ extends Geometry {
cal(): number {
return this.getArea() * 2
}
// 必须重新声明,以便ArkTS编译器了解方法类型
getArea(): number {
return super.getArea(); // 实际调用JS父类的实现
}
}
ArkTS与JavaScript的交互存在一些特殊规则和限制,这就是为什么您在继承JavaScript类时遇到了问题。问题的核心在于ArkTS对类型系统的严格要求:
- ArkTS是强类型语言,编译为方舟字节码而非JavaScript
- ArkTS强制要求类的属性在声明或构造函数中显式初始化
- ArkTS对空值和未定义值有更严格的检查
继承JS类的特殊处理:
当您的Polygon_类继承自JavaScript中的Geometry类时,ArkTS无法自动识别Geometry类中的getArea()方法,因为:
- JavaScript是动态类型,方法定义对ArkTS不完全可见
- ArkTS的编译器无法确定继承自JS类的方法类型信息
解决方案:
- 必须在子类中重新声明从JS父类继承的所有方法,以提供明确的类型信息
- 使用super调用实际实现
正确的做法是像您已经做的那样,在Polygon_类中重新声明getArea()方法:
更多关于HarmonyOS鸿蒙Next中ArkTS如何调用JavaScript代码(非web)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
感谢回复。请问您说的这些关于arkts调用js的规则和约束有相关的文档可以参考吗,我找了一圈没有找到,
在HarmonyOS鸿蒙Next中,ArkTS可以通过import
语句直接调用JavaScript代码。具体步骤如下:
-
创建JavaScript文件:首先,创建一个JavaScript文件,例如
example.js
,并在其中定义需要调用的函数或变量。 -
导出功能:在
example.js
中使用export
语句导出需要调用的函数或变量。 -
在ArkTS中导入:在ArkTS文件中使用
import
语句导入JavaScript文件中的功能。 -
调用JavaScript代码:在ArkTS中直接调用导入的JavaScript函数或变量。
代码示例:
// example.js
export function sayHello() {
return "Hello from JavaScript!";
}
// example.ets
import { sayHello } from './example.js';
function callJsFunction() {
let message = sayHello();
console.log(message); // 输出: Hello from JavaScript!
}
通过这种方式,ArkTS可以直接调用非Web环境下的JavaScript代码。
在HarmonyOS鸿蒙Next中,ArkTS可以通过@ohos.worker
模块调用JavaScript代码。具体步骤如下:
- 创建Worker:在ArkTS中创建一个Worker对象,指定JavaScript文件路径。
- 发送消息:通过
postMessage
方法向Worker发送消息。 - 接收消息:在Worker中处理消息并通过
postMessage
返回结果。 - 监听消息:在ArkTS中通过
onmessage
事件监听Worker返回的消息。
示例:
// ArkTS
const worker = new Worker('workers/example.js');
worker.postMessage('Hello from ArkTS');
worker.onmessage = (event) => {
console.log('Received from JS:', event.data);
};
// workers/example.js
self.onmessage = (event) => {
self.postMessage('Hello from JavaScript');
};
这种方式适用于非Web场景下的ArkTS与JavaScript交互。