我正在嘗試在Node.js中創建與PHP __callStatic
魔術方法相同的行為。
我正在嘗試使用Proxy
來實現,但我不確定是否是最佳選擇。
class Test { constructor() { this.num = 0 } set(num) { this.num = this.num num return this } get() { return this.num } } const TestFacade = new Proxy({}, { get: (_, key) => { const test = new Test() return test[key] } }) // 執行方法鏈以get結束 console.log(TestFacade.set(10).set(20).get()) // 期望結果: 30 // 回傳結果: 0 // 開始一個新的執行方法鏈,並在第一個set中再次實例化Test類 console.log(TestFacade.set(20).set(20).get()) // 期望結果: 40 // 回傳結果: 0
問題在於每次我嘗試訪問TestFacade
的屬性時,get
陷阱都會被觸發。我需要的行為是,當呼叫set
方法時,它將返回Test
類別的this
,我甚至可以保存該實例以後使用!
const testInstance = TestFacade.set(10) // set方法回傳`Test`的`this`而不是Proxy
如果有什麼不清楚的地方,請告訴我。
我不知道這是否是最佳選擇。但是我透過在
get
陷阱中傳回一個新的代理來解決了這個問題,該代理程式使用apply
陷阱將test
類別實例綁定到方法中: