HarmonyOS 中的 .ts 代码如何遍历对象?
定义了一个类装饰器,想在类中的方法被调用时,打印方法的名字和参数。这段代码在 nodejs 中是可以正常运行的,但是在HarmonyOS中,遍历对象时,只能拿到对象的属性,对方的方法一个都拿不到,我 debug 后看到方法都在proto中,那为啥拿不到方法呢?
代码如下:
export function LoggerAll<T extends new (...args: any[]) => any>(constructor: T) { 
  return class extends constructor { 
    constructor(...args: any[]) { 
      super(...args); 
      // 在构造函数中包装方法,确保每个实例都会进行包装 
      this.wrapMethods(); 
    } 
    private wrapMethods() { 
      for (const key in this) { 
        if (this.hasOwnProperty(key) && typeof this[key] === 'function') { 
          const originalMethod = this[key]; 
          this[key] = ((...args: any[]) => { 
            console.log(`Calling method: ${key}`); 
            console.log(`Arguments: `, args); 
            return originalMethod.apply(this, args); 
          }) as any; 
        } 
      } 
    } 
  }; 
}
        HarmonyOS
      
        赞
        
 收藏 0
 回答 1
 
        待解决
        
相关问题
 HarmonyOS 如何遍历对象属性 
960浏览  • 1回复 待解决
HarmonyOS ArkTS如何循环遍历对象 
2195浏览  • 1回复 待解决
HarmonyOS 如何遍历ComponentUtils对象中所有组件的API 
771浏览  • 1回复 待解决
求大佬告知如何遍历JSON对象 
1456浏览  • 1回复 待解决
HarmonyOS TS文件如何调用ArkTS的代码? 
1373浏览  • 1回复 待解决
ArkTS如何遍历object和Record这种类型的对象 
8632浏览  • 1回复 待解决
HarmonyOS 如何遍历获取page中的所有view 
775浏览  • 1回复 待解决
HarmonyOS 如何遍历interface 
862浏览  • 1回复 待解决
HarmonyOS ts中继承的类,怎么和C++中的类对象进行绑定 
1051浏览  • 1回复 待解决
HarmonyOS 动态共享包编译产物中丢失ts和js代码文件 
1507浏览  • 1回复 待解决
HarmonyOS如何在ts中调用ets文件中的变量 
2852浏览  • 1回复 待解决
HarmonyOS ts对象销毁后能感知到不,类似对象回收销毁后的finalize() 
930浏览  • 1回复 待解决
HarmonyOS Native调用TS侧方法,会报错,TS侧方法也不能获取到对象的变量 
1489浏览  • 1回复 待解决
HarmonyOS 如何遍历resources/rawfile目录 
864浏览  • 1回复 待解决
是否会长期支持ets调用ts代码 
2529浏览  • 1回复 待解决
HarmonyOS TS语言TaskPool无法通过Sendable装饰的对象传递引用 
791浏览  • 1回复 待解决
HarmonyOS 关于获取pixelmap对象代码示例 
1525浏览  • 1回复 待解决
HarmonyOS  如何遍历包含emoji的字符串 
1474浏览  • 1回复 待解决
HarmonyOS 是否可以对ts原生对象提供扩展方法 
1121浏览  • 1回复 待解决
HarmonyOS录音音频如何存放,以及遍历 
2777浏览  • 1回复 待解决
HarmonyOS C++反序列化拿到了ts对象后怎么调对象方法 
954浏览  • 1回复 待解决
有没有从ts设置回调到c++层,然后c++再回调到ts的示例代码? 
2105浏览  • 1回复 待解决
ts获取多语言字符串 ,请问在ts代码里要怎么获取 
2567浏览  • 1回复 待解决
worker.ts中如何获取context 
3184浏览  • 2回复 待解决
HarmonyOS 代码中如何获取当前的线程 
1412浏览  • 1回复 待解决





















ArkTS不允许使用标准库函数Function.apply、Function.bind以及Function.call。标准库使用这些函数来显式设置被调用函数的this参数。在ArkTS中,this的语义仅限于传统的OOP风格,函数体中禁止使用this。
使用 Object.getPrototypeOf 获取对象的原型链,并遍历原型链上的属性遍历原型链上的属性时,使用 Object.getOwnPropertyNames 获取所有属性名,而不是直接遍历对象本身的属性对于每一个属性,检查其是否是方法(typeof descriptor.value === ‘function’)并且不是构造函数(key !== ‘constructor’),然后进行方法包装。