我想用JavaScript来模仿更类的继承模型,但是当我尝试将这与JavaScript代理的想法混合时遇到了问题。为了长话短说,在我的类类型的定义中,我有一个函数_super(),其语义为“当子类B的实例上的方法X调用_super()时,调用父类上的方法X A类“:代理用法弄错函数function.caller.name
Class A
.X() {...}
^
|
|
Class B
.X() {..._super(); ...}
我依靠功能 .caller.name办法让我调用方法的名称(在本例中,‘X’)。然后我在父类上调用它。
const Class = {
...
_super: function _super(...args) {
// Get a handle on the function in which this function is invoked:
const callerMethod = _super.caller.name;
...
},
...
};
这个工作正常。当我在我的Class结构上添加一个Proxy对象时(我想捕获一些方法调用),问题就开始了。现在
function traceMethodCalls(obj) {
const handler = {
get(target, propKey, receiver) {
const origMethod = target[propKey];
return function (...args) {
// Do stuff
};
},
};
return new Proxy(obj, handler);
}
,功能 .caller在_super()方法是在代理处理程序对象(显然...)的匿名函数,这打乱了程序流程。
我的问题:有没有办法绕过这个?或以不同的方式思考?或者我必须完全放弃* .caller.name方法?
谢谢!是的,好像我可能不得不重新考虑我的方法。 – Cristina