프록시를 사용하여 Node.js에서 PHP의 __callStatic 속성을 시뮬레이션하는 방법
P粉653045807
2023-09-04 09:05:21
<p>Node.js에서 PHP <code>__callStatic</code> 매직 메소드와 동일한 동작을 생성하려고 합니다. </p>
<p><code>프록시</code>를 사용하여 수행하려고 하는데 이것이 최선의 선택인지 잘 모르겠습니다. </p>
<p>
<pre class="snippet-code-js lang-js Prettyprint-override"><code>class 테스트 {
생성자() {
this.num = 0
}
세트(숫자) {
this.num = this.num + num
이것을 돌려줘
}
얻다() {
this.num을 반환하세요.
}
}
const TestFacade = 새 프록시({}, {
가져오기: (_, 키) =>
const 테스트 = 새로운 테스트()
테스트 반환[키]
}
})
//실행 메소드 체인은 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</pre> 대신 `Test`의 `this`를 반환합니다.
<p>불분명한 점이 있으면 알려주시기 바랍니다. </p>
이것이 최선의 선택인지 모르겠습니다. 하지만 저는
get
陷阱中返回一个新的代理来解决了这个问题,该代理使用apply
陷阱将test
클래스 인스턴스를 통해 메소드에 바인딩합니다.