我想用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