Как обернуть объект с помощью прокси внутри конструктора?

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

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

2 ответа

Решение

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

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')
}

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

class Thing {

    constructor() {
        // ...
    }

}

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

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

});
Другие вопросы по тегам