Reflect and Proxy имеет совершенно разные цели и различные возможности.
MDN describes Proxy in that way:
Объект Proxy
используется для определения пользовательского поведения для основных операций (например, поиска имущества, присвоения, перечисления, вызов функции, и т.д.).
And Reflect in that way:
Reflect является встроенный объект, который предоставляет методы для interceptable операций JavaScript. Методы те же, что и у proxy handlers.
Я понимаю, что вы, вероятно, уже прочитали это, поэтому я буду использовать пример, чтобы объяснить его дальше.
Допустим, у вас есть объект:
const obj = {
a: 'foo',
b: 'bar',
};
Вы можете получить доступ к собственности a
используя свойство аксессор так:
console.log(obj.a); // 'foo'
Вы можете сделать то же самое, используя Reflect.get()
метод:
console.log(Reflect.get(obj, 'a')); // 'foo'
Вы также можете создать прокси этого объекта, используя Конструктор прокси. Мы будем использовать обработчик get
для перехвата всех поисков свойств.
const proxy = new Proxy(obj, {
get(target, property) {
return property in target ? target[property] : 'default';
},
});
Теперь, используя либо свойство аксессор или Reflect.get()
получить неопределенные результаты собственности в строке 'default'
:
console.log(proxy.c); // 'default'
console.log(Reflect.get(proxy, 'c')); // 'default'
Proxy и Reflect может отлично работать вместе. Например, вы можете создать прокси-сервер с обработчиком no-op get
, используя Reflect:
new Proxy(obj, {
get: Reflect.get,
});