매개 변수를 ES6`Proxy '핸들러에 전달할 수 있습니까?

Nov 24 2020

사용자 지정 설정으로 기본 설정을 재정의하고 Proxy개체가 이상적인 솔루션처럼 보였습니다.

  settingsHandler = {
    get(target, property) {
        return this.getSettings(property) || target[property];
    }
  }
  this.settings = new Proxy(baseSettings, settingsHandler);

그러나 this핸들러 내부 의 컨텍스트는 target객체 일 뿐이며 this.getSettings(property)사용할 수 없기 때문에 실패합니다.

Proxy이것에 대한 의미가 아닌 것처럼 보이지만 명확하게 언급 된 것을 찾을 수 없습니다. 대신 수업을 만들어야할까요?

답변

edzillion Nov 25 2020 at 12:32

내부 를 래핑 하고 객체를 해당 클래스의 속성으로 지정 하여 원하는 기능을 얻는 데 도움 이 되는 이 요점 을 찾았 습니다 .ProxyClasssettings

export default class ProxySettings extends Object {
  token: Token;
  settings: TokenSettings;

  constructor(token, settings) {
    super(...arguments);
    this.token = token;
    this.settings = settings;
    return new Proxy(this, this.handler);
  }
  get handler() {
    return {
      get(target, property) {
        return target.token.getSettings(property) || target.settings[property];
      }
    };
  }
}

다음과 같이 인스턴스화됩니다. this.settings = new ProxySettings(this.token, baseTokenSettings);

잘 작동하지만 약간 지저분하고 이전에이 패턴을 본 적이 없으므로 이것이 최선의 방법인지 확신 할 수 없습니다. 모든 의견을 부탁드립니다.

edzillion Nov 25 2020 at 13:52

유용한 조언을 고려할 때 내 요구에 맞는 가장 간단한 솔루션은 화살표 함수 구문을 사용하는 것입니다.

const settingsHandler = {
  get: (target, property) => {
      return this.getSettings(property) || target[property];
  }
}