Я хочу сделать прокси обработчик для любого составного объекта. Например, такой объект (я хочу обработать вызов функции):
let = obj {
a: {
b: {
c: callback => setTimeout(() => callback(null, 'hello'), 2000)
}
},
aa: {
bb: (callback, x, y) => setTimeout(() => callback(null, x + y), 40000)
}
};
Я сделал простой обработчик, но он не работает со вложенными свойствами:
var handler = {
get: function(target, name) {
return typeof target[name] == 'function' ? 'function call' : target[name];
}
}
Я могу сделать обработчик, чтобы обернуть каждое свойство в прокси. Это работает, но я думаю, что это не лучший способ:
var handler = {
get: function(target, name) {
if (typeof target[name] == 'function') {
return 'function call';
}
return typeof target[name] == 'object' ? new Proxy(target[name], handler) : target[name];
}
}
Есть ли более эффективный способ решить эту проблему?
var obj = {
a: {
b: {
c: callback => setTimeout(() => callback(null, 'hello'), 2000)
}
},
aa: {
bb: (callback, x, y) => setTimeout(() => callback(null, x + y), 40000)
}
};
var handler = {
get: function(target, name) {
if (typeof target[name] == 'function') {
return 'function call';
}
return typeof target[name] == 'object' ? new Proxy(target[name], handler) : target[name];
}
}
var p = new Proxy(obj, handler);
p.a.b.c