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
待解决
相关问题
求大佬告知如何遍历JSON对象
239浏览 • 1回复 待解决
ArkTS如何遍历object和Record这种类型的对象
5098浏览 • 1回复 待解决
HarmonyOS 动态共享包编译产物中丢失ts和js代码文件
296浏览 • 1回复 待解决
HarmonyOS如何在ts中调用ets文件中的变量
817浏览 • 1回复 待解决
HarmonyOS录音音频如何存放,以及遍历
353浏览 • 1回复 待解决
HarmonyOS Native调用TS侧方法,会报错,TS侧方法也不能获取到对象的变量
270浏览 • 1回复 待解决
HarmonyOS 如何遍历包含emoji的字符串
307浏览 • 1回复 待解决
HarmonyOS如何在代码中获取当前的 product
407浏览 • 1回复 待解决
是否会长期支持ets调用ts代码
1680浏览 • 1回复 待解决
worker.ts中如何获取context
2027浏览 • 2回复 待解决
HarmonyOS 如何遍历一个JSON Object
277浏览 • 1回复 待解决
HarmonyOS Worker线程中,如何保存成员对象?
178浏览 • 1回复 待解决
HarmonyOS ArkTS API中如何在代码中获取bundleName
775浏览 • 1回复 待解决
ArkTS中如何实现对象的深拷贝?
180浏览 • 1回复 待解决
ArkTs中如何获取对象的类名
2426浏览 • 1回复 待解决
HarmonyOS中的多线程如何做到数据对象共享?
44浏览 • 0回复 待解决
对象中函数的this如何指向外层
1969浏览 • 1回复 待解决
HarmonyOS如何在代码中动态创建XComponent
405浏览 • 1回复 待解决
有没有从ts设置回调到c++层,然后c++再回调到ts的示例代码?
860浏览 • 1回复 待解决
HarmonyOS 对象A数组,对象A中又嵌套一个对象B数组,修改B中的属性UI,不刷新
360浏览 • 1回复 待解决
ts获取多语言字符串 ,请问在ts代码里要怎么获取
1527浏览 • 1回复 待解决
鸿蒙中如何获取context对象
9193浏览 • 1回复 待解决
如何在ArkTS中合并对象
942浏览 • 1回复 待解决
如何在ArkTS中合并对象?
1355浏览 • 1回复 待解决
ArkTS调用js/ts代码会有性能损耗吗
2690浏览 • 2回复 待解决
ArkTS不允许使用标准库函数Function.apply、Function.bind以及Function.call。标准库使用这些函数来显式设置被调用函数的this参数。在ArkTS中,this的语义仅限于传统的OOP风格,函数体中禁止使用this。
使用 Object.getPrototypeOf 获取对象的原型链,并遍历原型链上的属性遍历原型链上的属性时,使用 Object.getOwnPropertyNames 获取所有属性名,而不是直接遍历对象本身的属性对于每一个属性,检查其是否是方法(typeof descriptor.value === ‘function’)并且不是构造函数(key !== ‘constructor’),然后进行方法包装。