Как обернуть объект с помощью прокси внутри конструктора? - PullRequest
0 голосов
/ 04 июля 2018

Я понимаю, что Proxy можно использовать для изменения поведения на уровне объекта, например, для получения и установки скобок. Все примеры, которые я могу найти, показывают, как построить объект, а затем обернуть его вызовом Proxy. Есть ли способ определить класс Foo, используя нотацию конструктора класса ES6, чтобы возвращаемый объект из конструктора уже был заключен в Proxy, а не вызывающему конструктору, который также должен вызывать Proxy отдельно?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Если я правильно понимаю ваш вопрос, что вы хотите сделать, это в конструкторе вернуть новый прокси, как это:

class MyClass {
  constructor() {
    return new Proxy(this, {
      // Proxy settings here
    })
  }
}

Здесь, в этом примере, мы создаем новый класс, а затем вызываем несколько свойств. Затем прокси просто распечатает свойства, которые были вызваны для простоты.

class MyClass {
  constructor() {
    return new Proxy(this, {
      get: (target, key) => {
        console.log('I am the key: ' + key)
        return Reflect.get(target, key)
      }
    })
  }
}

let c = new MyClass
c.awesome
c.billy
c.superTroopers

if (c instanceof MyClass) {
  console.log('I am an instance of MyClass')
} else {
  console.log('I am not an instance of MyClass')
}
0 голосов
/ 04 июля 2018

Насколько я знаю: нет, но вы можете установить prototype впоследствии. Как то так:

class Thing {

    constructor() {
        // ...
    }

}

Thing.prototype = new Proxy(Thing.prototype, {

    get(target, name) {
        // ...
    }

});
...