プロキシを使用して Node.js で PHP の __callStatic 属性をシミュレートする方法
P粉653045807
2023-09-04 09:05:21
<p>PHP の <code>__callStatic</code> マジック メソッドと同じ動作を Node.js で作成しようとしています。 </p>
<p><code>Proxy</code> を使用して実行しようとしていますが、それが最良のオプションかどうかはわかりません。 </p>
<p>
<pre class="snippet-code-js lang-js prettyprint-override"><code>class Test {
コンストラクター() {
this.num = 0
}
セット(数値) {
this.num = this.num 番号
これを返す
}
得る() {
this.num を返す
}
}
const TestFacade = 新しいプロキシ({}, {
取得: (_, キー) => {
const テスト = 新しい Test()
テスト[キー]を返す
}
})
// 実行メソッドチェーンは get で終了します
console.log(TestFacade.set(10).set(20).get())
// 期待される結果: 30
// 返される結果: 0
// 新しい実行メソッド チェーンを開始し、最初のセットで Test クラスを再度インスタンス化します。
console.log(TestFacade.set(20).set(20).get())
// 期待される結果: 40
// 返される結果: 0</code></pre>
</p>
<p>問題は、<code>TestFacade</code> のプロパティにアクセスしようとするたびに、<code>get</code> トラップがトリガーされることです。私が必要とする動作は、<code>set</code> メソッドが呼び出されたときに、<code>Test</code> クラスの <code>this</code> を返し、それを保存することもできるということです。後で使用するためのインスタンスです。 </p>
<pre class="brush:php;toolbar:false;">const testInstance = TestFacade.set(10) // set メソッドは Proxy の代わりに `Test` の `this` を返します</pre>
<p>ご不明な点がございましたら、お知らせください。 </p>
これが最善の選択肢かどうかはわかりません。しかし、
apply
トラップを使用してtest
クラス インスタンスをメソッドにバインドするget
トラップで新しいプロキシを返すことで問題を解決しました。