>  Q&A  >  본문

프록시를 사용하여 Node.js에서 PHP의 __callStatic 속성을 시뮬레이션하는 방법

<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>
P粉653045807P粉653045807381일 전483

모든 응답(1)나는 대답할 것이다

  • P粉549986089

    P粉5499860892023-09-05 00:15:19

    이것이 최선의 선택인지 모르겠습니다. 하지만 저는 get陷阱中返回一个新的代理来解决了这个问题,该代理使用apply陷阱将test 클래스 인스턴스를 통해 메소드에 바인딩합니다.

    으아악

    회신하다
    0
  • 취소회신하다