--- title: Reflect slug: Web/JavaScript/Reference/Global_Objects/Reflect translation_of: Web/JavaScript/Reference/Global_Objects/Reflect ---
{{JSRef}}

Reflect - это встроенный объект, который предоставляет методы для перехватывания JavaScript операций. Эти методы аналогичны методам proxy handler`ов. Reflect - это не функциональный, а простой объект, он не является сконструированным.

Описание

В отличие от большинства глобальных объектов, Reflect - это не конструктор. Вы не можете использовать его с оператором new или вызывать Reflect, как функцию. Все свойства и методы объекта Reflect являются статическими (так же, как и у объекта {{jsxref("Math")}}).

Методы

Объект Reflect обеспечивает работу статических функций, называющиеся так же, как методы proxy handler`а. Некоторые из этих методов - те же, что и соответствующие им методы класса {{jsxref("Object")}}.

{{jsxref("Reflect.apply()")}}
Вызывает целевую функцию с аргументами, переданными в параметре args. Смотрите также {{jsxref("Function.prototype.apply()")}}.
{{jsxref("Reflect.construct()")}}
 Оператор new как функция. Аналогично new target(...args). Также предоставляет возможность определить другой прототип.
{{jsxref("Reflect.defineProperty()")}}
Похож на {{jsxref("Object.defineProperty()")}}. Возвращает {{jsxref("Boolean")}}.
{{jsxref("Reflect.deleteProperty()")}}
Оператор delete как функция. Аналогично delete target[name].
{{jsxref("Reflect.enumerate()")}}
Похож на цикл for...in. Возвращает итератор с собственными перечисляемыми и наследуемыми свойствами целевого объекта.
{{jsxref("Reflect.get()")}}
Функция, которая возвращает значение свойств.
{{jsxref("Reflect.getOwnPropertyDescriptor()")}}
Аналогично {{jsxref("Object.getOwnPropertyDescriptor()")}}. Возвращает дескриптор указанного свойства если присутствует в объекте, иначе {{jsxref("undefined")}}.
{{jsxref("Reflect.getPrototypeOf()")}}
Аналогично {{jsxref("Object.getPrototypeOf()")}}.
{{jsxref("Reflect.has()")}}
Оператор in как функция. Возвращает значение {{jsxref("Boolean")}} в зависимости от факта наличия собственного или наследованного свойства.
{{jsxref("Reflect.isExtensible()")}}
Аналогично {{jsxref("Object.isExtensible()")}}.
{{jsxref("Reflect.ownKeys()")}}
Возвращает массив строк с именами собственных (не наследованных) свойств.
{{jsxref("Reflect.preventExtensions()")}}
Аналогично {{jsxref("Object.preventExtensions()")}}. Возвращает {{jsxref("Boolean")}}.
{{jsxref("Reflect.set()")}}
Функция, присваивающая значения свойствам. Возвращает {{jsxref("Boolean")}} значение true при успешном выполнении.
{{jsxref("Reflect.setPrototypeOf()")}}
Функция, присваивающая прототип целевому объекту.

Примеры

Проверка наличия конкретных свойств у объекта

const duck = {
  name: 'Maurice',
  color: 'white',
  greeting: function() {
    console.log(`Quaaaack! My name is ${this.name}`);
  }
}

Reflect.has(duck, 'color');
// true
Reflect.has(duck, 'haircut');
// false

Возврат собственных ключей объекта

Reflect.ownKeys(duck);
// [ "name", "color", "greeting" ]

Добавление нового свойства в объект

Reflect.set(duck, 'eyes', 'black');
// вернётся "true" если вызов успешен
// объект "duck" теперь содержит свойство "eyes" со значением "black"

Спецификации

Спецификация Статус Комментарий
{{SpecName('ES6', '#sec-reflect-object', 'Reflect')}} {{Spec2('ES6')}} Изначальное определение.

Совместимость с браузерами

{{CompatibilityTable}}

Возможность Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка {{CompatChrome("44")}} {{CompatVersionUnknown}} {{CompatGeckoDesktop("42")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Возможность Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("42")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}

Смотрите также