Reflect
About
Reflect это встроенный объект, предоставляющий методы для перехватываемых операций JavaScript. Это те же самые методы, что имеются в обработчиках Proxy. Объект Reflect не является функцией.
Reflect помогает при пересылке стандартных операций из обработчика к целевому объекту.
Например, метод Reflect.has() это тот же оператор in но в виде функции:
Reflect.has(Object, 'assign'); // trueУлучшенная функция apply
applyВ ES5 обычно используется метод Function.prototype.apply() для вызова функции в определенном контексте (с определенным this) и с параметрами, заданными в виде массива (или массиво-подобного объекта).
Function.prototype.apply.call(Math.floor, undefined, [1.75]);С методом Reflect.apply эта операция менее громоздка и более понятна:
Reflect.apply(Math.floor, undefined, [1.75]);
// 1;
Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
// "hello"
Reflect.apply(RegExp.prototype.exec, /ab/, ['confabulation']).index;
// 4
Reflect.apply(''.charAt, 'ponies', [3]);
// "i"Проверка успешности определения нового свойства
Метод Object.defineProperty, в случае успеха операции, возвращает объект, а при неудаче вызывает ошибку TypeError. Из-за этого определение свойств требует обработки блоком try...catch для перехвата возможных ошибок. Метод Reflect.defineProperty, в свою очередь, возвращает успешность операции в виде булева значения, благодаря чему возможно использование простого if...else условия:
if (Reflect.defineProperty(target, property, attributes)) {
// успех
} else {
// что-то пошло не так
}Last updated