参考如下示例:
import { util } from '@kit.ArkTS';
class Test1 {
static data: string = "initData";
static async printData(arg: string) { // 异步方法
console.log("execute original printData");
console.log("Test.data is" + Test1.data);
console.log('arg', arg);
return 0;
}
}
// 插桩
util.Aspect.addBefore(Test1, "printData", true,
(classObj: Object, arg: string): void => {
console.log("execute before");
Reflect.set(classObj, "data", "dataChangedByBefore");
console.log("arg is " + arg);
}
);
Test1.printData("m1").then((res) => {
console.log("res = " + res.toString());
console.log("Test.data = " + Test1.data);
});
class Test2 {
static data: string = "initData";
static async printData(arg: string) { // 异步方法
console.log("execute original printData");
console.log("Test.data is" + Test2.data);
console.log('arg', arg);
return 0;
}
}
// 替换
util.Aspect.replace(Test2, "printData", true,
// 替换成另外一个异步函数
async (classObj: Object, arg: string): Promise<number> => {
console.log("execute instead");
Reflect.set(classObj, "data", "dataChangedByInstead");
console.log("arg is " + arg);
return Promise.resolve(100);
});
Test2.printData("m1").then((res) => {
console.log("res = " + res.toString());
console.log("Test.data = " + Test2.data);
});