HarmonyOS 是否有提供类似反射的机制,能够在前端页面(webview)中感知ArkTS提供给页面的接口

HarmonyOS
19h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

动态import支持部分反射功能,如:

// harlibrary's src/main/ets/utils/Calc.ets

export class Calc {
  public static staticAdd(a:number, b:number):number {
    let c = a + b;
    console.log('DynamicImport I am harlibrary in staticAdd, %d + %d = %d', a, b, c);
    return c;
  }

  public instanceAdd(a:number, b:number):number {
    let c = a + b;
    console.log('DynamicImport I am harlibrary in instanceAdd, %d + %d = %d', a, b, c);
    return c;
  }
}

export function addHarlibrary(a:number, b:number):number {
  let c = a + b;
  console.log('DynamicImport I am harlibrary in addHarlibrary, %d + %d = %d', a, b, c);
  return c;
}

// HAP's Index.ets

import('harlibrary').then((ns:ESObject) => {
  ns.Calc.staticAdd(8, 9); // 调用静态成员函数staticAdd()
  let calc:ESObject = new ns.Calc(); // 实例化类Calc
  calc.instanceAdd(10, 11); // 调用成员函数instanceAdd()
  ns.addHarlibrary(6, 7); // 调用全局方法addHarlibrary()

  // 使用类、成员函数和方法的字符串名字进行反射调用
  let className = 'Calc';
  let methodName = 'instanceAdd';
  let staticMethod = 'staticAdd';
  let functionName = 'addHarlibrary';
  ns[className][staticMethod](12, 13); // 调用静态成员函数staticAdd()
  let calc1:ESObject = new ns[className](); // 实例化类Calc
  calc1[methodName](14, 15); // 调用成员函数instanceAdd()
  ns[functionName](16, 17); // 调用全局方法addHarlibrary()
});

目前ArkTs支持Reflect.get和Reflect.set,不支持Reflect.apply ArkTs限制的标准库可以参考文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5#限制使用标准库

分享
微博
QQ
微信
回复
16h前
相关问题
HarmonyOS能够提供页面的基类吗?
421浏览 • 1回复 待解决
有无ArkTS编码规范可以提供给开发者
2199浏览 • 1回复 待解决
HarmonyOS提供登录页面的实现样例
381浏览 • 1回复 待解决
HarmonyOS WebView组件前端页面调试
276浏览 • 1回复 待解决
HarmonyOS是否提供类似opencv能力
1310浏览 • 1回复 待解决
提供Webview demo哪些?
226浏览 • 1回复 待解决
HarmonyOS是否类似切后台快照机制
64浏览 • 1回复 待解决
HarmonyOS 是否提供倾斜属性
53浏览 • 1回复 待解决
是否提供提前初始化webview能力
2381浏览 • 1回复 待解决