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ł.