Piszemy ćwiczenie z obiektem Reflext – tworzymy klasę Helper, która radzi sobie zarówno z tablicami jak i obiektami tablicopodobnymi. Do dzieła.

Ok, oto tablica i obiekt tablicopodobny:

let arrlike = {
    length: 3,
    0: "a",
    1: "b",
    2: "c"
};

let array = ["a", "b", "c"];

Chcemy taką klasę, która poradzi sobie z pozyskiwaniem długości oraz wartości pod indeksem z jednego jak i z drugiego.

Zobaczmy co na stronie MDN piszą o Reflect.get:

const object1 = {
  x: 1,
  y: 2,
};

console.log(Reflect.get(object1, 'x'));
// Expected output: 1

Teraz sami pokombinujmy z tym length, które w has wyskakuje, ale przez get nie chce się wziąć z tablicy:

const array1 = ['zero', 'one'];

console.log(Reflect.getOwnPropertyDescriptor(array1, "length").value);
// 2
console.log(Reflect.getOwnPropertyDescriptor({length: 0}, "length").value);
//0

Ok, mamy patent, pora napisać klasę:

let arrlike = {
    length: 3,
    0: "a",
    1: "b",
    2: "c"
};

let array = ["a", "b", "c"];

class ArrHelper {

    static getIndex(arrLike, idx){
        return Reflect.get(arrLike, idx );
    }

    static getLength(arrLike){
       return Reflect.getOwnPropertyDescriptor(arrLike, "length").value;
    }
}

console.log(ArrHelper.getIndex(arrlike, 2)); //c
console.log(ArrHelper.getIndex(array, 2)); //c

console.log(ArrHelper.getLength(arrlike)); //3
console.log(ArrHelper.getLength(array)); //3

Jeżeli czegoś nie rozumiemy to sprawdźmy to sobie w dokumentacji na spokojnie oraz przeróbmy poprzedni materiał.