прокси-обработчик с глубокими вложенными объектами - PullRequest
2 голосов
/ 05 ноября 2019

Я хочу сделать прокси обработчик для любого составного объекта. Например, такой объект (я хочу обработать вызов функции):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...