【发布时间】:2018-11-23 08:17:21
【问题描述】:
我有一个类,我想对其应用代理,观察方法调用和构造函数调用:
Calculator.js
class Calc {
constructor(){}
add(a, b) {
return a+b;
}
minus(a, b) {
return a-b;
}
}
module.exports = Calc;
index.js
const Calculator = require('./src/Calculator');
const CalculatorLogger = {
construct: function(target, args, newTarget) {
console.log('Object instantiated');
return new target(...args);
},
apply: function(target, thisArg, argumentsList) {
console.log('Method called');
}
}
const LoggedCalculator = new Proxy(Calculator, CalculatorLogger);
const calculator = new LoggedCalculator();
console.log(calculator.add(1,2));
当它被调用时,我希望输出是:
对象实例化
方法调用
但是,apply 没有被调用,我认为这是因为我将代理附加到 Calculator 类,而不是实例化对象,因此不知道 apply 陷阱。
我如何构建一个包罗万象的代理来“观察”方法调用和构造函数调用。
【问题讨论】:
-
你甚至没有应用
calculator对象(它不是一个函数)。您正在应用add方法。 -
仅供参考,您应该尽可能在代理处理程序中尝试使用
Reflect,所以在这里您需要Reflect.construct而不是new target。
标签: javascript ecmascript-6 proxy-pattern