Reflect - исследование и обаботка свойств объектов

Note

EcmaScript6

class Reflect
apply(function, this, args)

Вызов функции с заданным контекстом.

Аналогичен методу apply Function

function s(a, b){
    return this.value + a + b;
}
Reflect.apply(s, {value: 100}, [10, 30]);
// 140
construct(constructor, args, prototype)

Вызов функции в качестве конструктора

Аналогичен оператору new, отличается:

  • передача в свойстве prototype
function const1(a, b){};
function const2(){};
var newObj = Reflect.construct(const1, [1, 2], const2);
defineProperty(object, property, descriptor)

Опеределяет новое или изменяет существующее свойство объекта. Возвращает логическое значение, была ли операция успешной.

Аналогичен методу defineProperty Object, отличается:

  • возвращает логическое значение, а не модифицированный объект
// создание свойств данных
var obj = {};
Reflect.defineProperty(obj, 'name', {
    // значение свойства
    value: 'Ilnurgi',
    // значение может быть изменено
    writable: true,
    // атриубты свойства могут быть изменены и свойство может быть удалено
    configurable: true,
    // свойство может быть использовано в цикле for ... in
    enumerable: true
})

// создание свойства со средствами доступа
var obj = {
    __name__: 'ilnurgi'
}
Reflect.defineProperty(obj, 'name', {
    get: function(){
        return this.__name__;
    },
    set: function(value){
        this.__name__ = value;
    },
    // свойства дескриптора могут быть изменены и свойство может быть удалено
    configurable: true,
    // свойство может быть использовано в цикле for ... in
    enumerable: true
})
deleteProperty(object, property)

Удаление свойства объекта.

Аналогичен delete

Reflect.deleteProperty(obj, 'name');
enumerate(object)

Возвращает итератор, перечисляемые свойства объекта.

Аналогичен циклу for ... in

var iter = Reflect.enumerate(obj);
iter.next().value;
get(object, property, this)

Возвращает значение свойства объекта

getOwnPropertyDescriptor(object, property)

Возвращает дескриптор свойства объекта

Аналогичен getOwnPropertyDescriptor Object

var descriptor = Reflect.getOwnPropertyDescriptor(obj, 'name');
getPrototypeOf(object)

Извлекает прототип объекта

Аналогичен getPrototypeOf Object

var obj2 = Reflect.getPrototypeOf(obj1);
has(object, property)

Используется для проверки существования свойства в объекте.

Reflect.has(obj, 'name');
isExtensible(object)

Проверяет возможность расширения объекта, возможность добавления новых свойств в объект

Аналогичен isExtensible Object

Reflect.isExtensible(obj);
ownKeys(object)

Возвращает массив ключей свойств объекта, игнорируя наследуемые свойства.

Reflect.ownKeys(obj);
preventExtensions(object)

Позволяет отметить объект как нерасширяемый, возвращает логическое значение, успешность операции.

Аналогичен preventExtensions Object

Reflect.preventExtensions(obj);
set(object, property, value, this)

Задает значение свойства объекта

setPrototypeOf(object, prototype)

Установка значения прототипа

Reflect.setPrototypeOf(obj, {
    name: 'ilnurgi'
})