Прокси - это, по сути, объекты, которые предоставляют программный способ подключиться к операциям, которые объекты могут выполнять над ними. Исходя из этого, в качестве основы невозможно отличить доступ к свойству от вызова свойства + вызов в точке, к которой осуществляется доступ к свойству. Тот факт, что возвращаемое значение является функцией, это все, что вы можете знать.
С точки зрения языка, p.foo()
разбивается на
var p = ...
var foo = p.foo;
foo.apply(p, []);
в качестве примера. p.foo
на самом деле не будет доступа к .apply
, но дело в том, что доступ к свойству полностью не зависит от того, как возвращаемое значение фактически используется / вызывается.
Таким образом, вы можете проверить, действительно ли значение test
уже является функцией, и, если это так, обернуть это значение своей оберткой. Если это не функция, похоже, вы захотите пропустить ее перенос. например,
get: function(target, prop, receiver) {
var value = Reflect.get(target, prop, receiver);
if (typeof value === "function") {
return function(...args) {
// probably call 'value' with whatever you need
};
} else {
// return the origin value.
return value;
}
}