HarmonyOS 鸿蒙Next arkTS如何获取class中的所有属性和方法

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next arkTS如何获取class中的所有属性和方法 之前使用ts的方法获取Class中的方法和属性的,现在prototype也不让用了,调其他getOwnPropertyDescriptor之类的方法也是各种报错。。。现在应该怎么获取Class中所有属性和方法

2 回复
class WebService {
  customBackFunction: Function | null = null

  setBackKeyCallback(param: Function) {
    // Logger.i('36', String(WebView))
    this.customBackFunction = param
  }

  getTestData = (input: string): string => {
    console.info('输入数据:', input);
    const resultMap = new Map<string, string>();
    resultMap[input] = "我是value";

    if (this.customBackFunction) {
      this.customBackFunction(1)
    }
    return JSON.stringify(resultMap);
  }
  getTestDataAsync = async (input: string): Promise<string> => {
    return "";
  }
}

@WebEntry
@Component
struct Index {
  build() {
    Column({ space: 20 }) {
       Button('测试').onClick(() =>{
         Object.keys(new WebService()).forEach((key) => {
           console.info('====key', key)
         });
       })

    }
    .height('100%')
    .width('100%')
  }
}

``javascript ====key customBackFunction ====key getTestData ====key getTestDataAsync


class中正常的方法比如 `setBackKeyCallback(param: Function) {}` 是没办法获取到。

但如果把方法写成 `getTestData = (input: string): string => {}` 这种就可以获取到。

更多关于HarmonyOS 鸿蒙Next arkTS如何获取class中的所有属性和方法的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,使用arkTS(Ark TypeScript)开发时,可以通过反射机制来获取一个class中的所有属性和方法。arkTS支持ES6及以上版本的JavaScript特性,其中就包括类和反射。不过需要注意的是,arkTS的反射能力与传统的Java或C++反射有所不同,它更接近于JavaScript的反射机制。

要获取arkTS中class的所有属性和方法,可以使用Object.getOwnPropertyNamesObject.getOwnPropertySymbols(如果类使用了Symbol属性)来遍历class的实例,并结合typeof操作符来判断属性的类型是否为函数(即方法)。以下是一个示例代码:

class MyClass {
    prop1: number = 1;
    prop2: string = "hello";

    method1() {
        console.log("This is method1");
    }

    method2(param: string) {
        console.log(param);
    }
}

const instance = new MyClass();
const propsAndMethods = [...Object.getOwnPropertyNames(instance), ...(Object.getOwnPropertySymbols(instance) || [])];

propsAndMethods.forEach(name => {
    const prop = instance[name];
    if (typeof prop === "function") {
        console.log("Method:", name);
    } else {
        console.log("Property:", name);
    }
});

上述代码将遍历MyClass实例的所有属性和方法,并打印出它们的名称。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部