let testJson ={
"XA" : 1,
"XB" : 1,
"XD" : 1,
"XE" : 1,
}
// 使用 WeakMap 存储方法到 JSON 键的映射关系
const methodToJsonKeyMap = new WeakMap<Function, string>();
const jsonKeyToMethodMap = new Map<string, Map<any, Function>>();
// 装饰器:将方法关联到 JSON 键
function jsonKey(key: string) {
return function(value: Function, context: ClassMethodDecoratorContext) {
// 存储映射关系:方法 -> JSON 键
methodToJsonKeyMap.set(value, key);
// 存储反向映射:JSON 键 -> (实例 -> 方法)
if (!jsonKeyToMethodMap.has(key)) {
jsonKeyToMethodMap.set(key, new Map());
}
// 在 addInitializer 中建立实例到方法的映射
context.addInitializer(function() {
const instanceMap = jsonKeyToMethodMap.get(key)!;
instanceMap.set(this, value.bind(this));
});
// 不返回或返回 void,保持原方法不变
return;
};
}
// 方案1:工具类 - 使用装饰器元数据(推荐)
class MethodCaller {
// 根据 JSON 对象的键,通过装饰器元数据调用对应的方法
static callMethods

68

被折叠的 条评论
为什么被折叠?



