Answer

Answer

t.me/js_test

Ответ:

array = new Proxy(array, {
    get(target, prop, receiver) {
        if (prop < 0) {
            prop = +prop + target.length;
        }
        return Reflect.get(target, prop, receiver);
    },
});

Объяснение:

Для решения данной задачи нужно описать метод get в нашем Proxy. Метод принимает target (исходный объект), prop (имя свойства) и receiver (ссылка на правильный контекст геттера). Если prop меньше нуля то добавляем к нему длину исходного массива, нужно заметить что prop приходит как строка поэтому нужно перевести его в тип number. В конце возвращаем Reflect.get и передаём в него все полученные параметры. Объект Reflect упрощает создание прокси, с помощью него мы можем обратиться к почти нативным методам объекта target. receiver нужен именно в методах объекта Reflect чтобы избежать проблем с наследованием.

Код для проверки:

let array = [1, 2, 3, 4, 5];

array = new Proxy(array, {
    get(target, prop, receiver) {
        if (prop < 0) {
            prop = +prop + target.length;
        }
        return Reflect.get(target, prop, receiver);
    },
});

console.log(array[1]);
console.log(array[2]);
console.log(array[-1]);
console.log(array[-2]);


Report Page