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]);