So simulieren Sie mit Proxy das __callStatic-Attribut von PHP in Node.js
P粉653045807
2023-09-04 09:05:21
<p>Ich versuche, in Node.js das gleiche Verhalten wie die PHP-Magie-Methode <code>__callStatic</code> zu erzeugen. </p>
<p>Ich versuche es mit <code>Proxy</code>, bin mir aber nicht sicher, ob das die beste Option ist. </p>
<p>
<pre class="snippet-code-js lang-js Prettyprint-override"><code>class Test {
Konstrukteur() {
this.num = 0
}
set(num) {
this.num = this.num + num
gib das zurück
}
erhalten() {
gib diese.num zurück
}
}
const TestFacade = new Proxy({}, {
get: (_, Schlüssel) =>
const test = neuer Test()
Rückgabetest[Schlüssel]
}
})
//Die Ausführungsmethodenkette endet mit get
console.log(TestFacade.set(10).set(20).get())
//Erwartetes Ergebnis: 30
//Ergebnis zurückgeben: 0
// Eine neue Ausführungsmethodenkette starten und die Testklasse im ersten Satz erneut instanziieren
console.log(TestFacade.set(20).set(20).get())
//Erwartetes Ergebnis: 40
// Ergebnis zurückgeben: 0</code></pre>
</p>
<p>Das Problem ist, dass jedes Mal, wenn ich versuche, auf die Eigenschaften von <code>TestFacade</code> zuzugreifen, die <code>get</code>-Falle ausgelöst wird. Das Verhalten, das ich benötige, ist, dass die Methode <code>set</code> <code>dies</code> der Klasse <code>Test</code> zurückgibt Instanz zur späteren Verwendung! </p>
<pre class="brush:php;toolbar:false;">const testInstance = TestFacade.set(10) // Die Set-Methode gibt „this“ von „Test“ anstelle von Proxy zurück</pre>
<p>Wenn etwas unklar ist, lassen Sie es mich bitte wissen. </p>
我不知道这是否是最佳选择。但是我通过在
get
陷阱中返回一个新的代理来解决了这个问题,该代理使用apply
陷阱将test
类实例绑定到方法中: