好的 谢谢

这玩意我试过,不好用,好像是有线程问题,多调用几次就崩了
function emit(eventEnum: string): any {
return function (target: any, propertyKey: any, descriptor: PropertyDescriptor): PropertyDescriptor {
const getter = function () {
console.log("getter: " + propertyKey);
return this["_" + propertyKey]
};
const setter = function (newValue: any) {
this["_" + propertyKey] = newValue
console.log("setter: " + propertyKey + " = " + newValue);
EventManage.emit(eventEnum)
};
// Object.defineProperty(target, propertyKey, {
// get: getter,
// set: setter,
// enumerable: true,
// configurable: true,
// });
if ('initializer' in descriptor) {
target["_" + propertyKey] = (descriptor as any).initializer();
}
delete (descriptor as any).initializer;
delete descriptor.writable;//
return Object.assign(descriptor, { get: getter, set: setter });
}
}
这样试试。
但这有个问题:就是 initializer 初始化后的值被作用在原型上,而不是对象的属性上。
目前受限于 babel 的实现。具体可以看这个帖子的讨论:
感谢反馈,有同学在跟进中。有进展会同步。
辛苦~
今晚又尝试了下,在项目的ts脚本中通过给全局对象添加属性的方式
globalThis[“abc”] = {a:1, b:2, c:3}
在插件的scene.ts中是可以正常取到数据的
感谢大佬,新年快乐啊,这样可以了,是因为在3.x引擎修改了装饰器的编译方式吗,2.x对于装饰器的编译是tsc可以用Object.defineProperty修改而不用返回值,3.x使用babel必须返回一个PropertyDescriptor或者其他预期的值,才能处理属性的行为,我理解是这样的
好的,我确认下
多调用几次会奔溃,你是怎么调用的?方便提供demo看看么?
嗯,2.x 是用 tsc,3.x 改用 babel 后导致的差异。
项目中已经不再用这种方式了
现在换成了
这种方式来处理
我的creator版本是2.4.14
导出鸿蒙项目用的是 jsvm
具体实现是看的这两个文档,你可以按照这个文档写几个方法试试
-
如何在 HarmonyOS 平台上使用 ArkTs 直接调用 JavaScript 方法
templates/openharmony/native/engine/doc/如何在 HarmonyOS 平台上使用 ArkTs 直接调用 JavaScript 方法.md · lestelhw/engine-native_1 - Gitee.com -
如何在 HarmonyOS 平台上使用 JavaScript 直接调用 ArkTs 方法
templates/openharmony/native/engine/doc/如何在 HarmonyOS 平台上使用 JavaScript 直接调用 ArkTs 方法.md · lestelhw/engine-native_1 - Gitee.com
我记得第一个没有合进去,应该是用不了的。你是在arkts调用javascript方法?
当时是有互相调用的
当时做鸿蒙的时候,2.4.14版本还没有发,是加了一个群,然后有人发给我的2.4.14的creator
好的,后续加入了arkts调用js的方法的时候,我在多测试下。
辛苦~
大佬,帮忙跟进下 这个吧, 感谢!!







