Reflect - это встроенный объект, который предоставляет методы для перехватывания JavaScript операций. Эти методы аналогичны методам proxy handler`ов. Reflect
- это не функциональный, а простой объект, он не является сконструированным.
Описание
В отличие от большинства глобальных объектов, Reflect
- это не конструктор. Вы не можете использовать его с оператором new
или вызывать Reflect,
как функцию. Все свойства и методы объекта Reflect
являются статическими (так же, как и у объекта Math
).
Методы
Объект Reflect
обеспечивает работу статических функций, называющиеся так же, как методы proxy handler`а. Некоторые из этих методов - те же, что и соответствующие им методы класса Object
.
Reflect.apply()
- Вызывает целевую функцию с аргументами, переданными в параметре
args
. Смотрите такжеFunction.prototype.apply()
. Reflect.construct()
- Оператор
new
как функция. Аналогичноnew target(...args)
. Также предоставляет возможность определить другой прототип. Reflect.defineProperty()
- Похож на
Object.defineProperty()
. ВозвращаетBoolean
. Reflect.deleteProperty()
- Оператор
delete
как функция. Аналогичноdelete target[name]
. Reflect.enumerate()
- Похож на цикл
for...in
. Возвращает итератор с собственными перечисляемыми и наследуемыми свойствами целевого объекта. Reflect.get()
- Функция, которая возвращает значение свойств.
Reflect.getOwnPropertyDescriptor()
- Аналогично
Object.getOwnPropertyDescriptor()
. Возвращает дескриптор указанного свойства если присутствует в объекте, иначеundefined
. Reflect.getPrototypeOf()
- Аналогично
Object.getPrototypeOf()
. Reflect.has()
- Оператор
in
как функция. Возвращает значениеBoolean
в зависимости от факта наличия собственного или наследованного свойства. Reflect.isExtensible()
- Аналогично
Object.isExtensible()
. Reflect.ownKeys()
- Возвращает массив строк с именами собственных (не наследованных) свойств.
Reflect.preventExtensions()
- Аналогично
Object.preventExtensions()
. ВозвращаетBoolean
. Reflect.set()
- Функция, присваивающая значения свойствам. Возвращает
Boolean
значениеtrue
при успешном выполнении. 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'
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Reflect' в этой спецификации. |
Стандарт | Изначальное определение. |
Совместимость с браузерами
We're converting our compatibility data into a machine-readable JSON format.
This compatibility table still uses the old format,
because we haven't yet converted the data it contains.
Find out how you can help!
Возможность | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Базовая поддержка | 44 | (Да) | 42 (42) | Нет | Нет | Нет |
Возможность | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Базовая поддержка | Нет | Нет | 42.0 (42) | Нет | Нет | Нет |