Reflect
=======

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

Описание
--------

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

Методы
------

Объект `Reflect` обеспечивает работу статических функций, называющиеся так же, как методы proxy handler (en-US). Некоторые из этих методов - те же, что и соответствующие им методы класса `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()` (en-US)

Аналогично `Object.getOwnPropertyDescriptor()`. Возвращает дескриптор указанного свойства если присутствует в объекте, иначе `undefined`.

`Reflect.getPrototypeOf()` (en-US)

Аналогично `Object.getPrototypeOf()`.

`Reflect.has()` (en-US)

Оператор `in` как функция. Возвращает значение `Boolean` в зависимости от факта наличия собственного или наследованного свойства.

`Reflect.isExtensible()` (en-US)

Аналогично `Object.isExtensible()`.

`Reflect.ownKeys()`

Возвращает массив строк с именами собственных (не наследованных) свойств.

`Reflect.preventExtensions()` (en-US)

Аналогично `Object.preventExtensions()`. Возвращает `Boolean`.

`Reflect.set()` (en-US)

Функция, присваивающая значения свойствам. Возвращает `Boolean` значение `true` при успешном выполнении.

`Reflect.setPrototypeOf()` (en-US)

Функция, присваивающая прототип целевому объекту.

Примеры
-------

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


```js
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
```

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


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

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


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

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect-object |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

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

* Глобальный объект `Proxy`.
* Объект `handler` (en-US).