Szybka lekcja, w zasadzie przypomnienie. Pisaliśmy już sobie różne polyfille, natomiast nigdy nie tłumaczyłem, czym jest this, wydawało mi się to oczywiste, teraz się na chwilę nad tym pochylimy.
Ok, najpierw zobaczmy jak można przypisywać do prototypów jakieś funkcje:
Array.prototype.sayHello = function(){
console.log("Hello world");
}
Proste, prawda? Użyjmy sobie naszej funkcji:
Array.prototype.sayHello = function(){
console.log("Hello world");
}
let arr = [];
arr.sayHello(); //hello world
Ok, teraz wylogujmy sobie this:
Array.prototype.logThis = function(){
console.log(this);
}
let arr = [1,2,3];
arr.logThis(); //(3) [1, 2, 3]
Proste. Warto zwrócić uwagę, że z typami prostymi też możemy się tak bawić, ale wtedy mamy do czynienia z wrapperami tych typów, które też są obiektami:
Number.prototype.logThis = function(){
console.log(this, typeof this);
};
let num = 10;
num.logThis(); //Number {10}, 'object'
console.log(num, typeof num); //10 'number'
Dokładniej, mamy do czynienia z tym:
let num2 = new Number(10);
console.log(typeof num, typeof num2); //number object
Ale mniejsza. Teraz napiszemy sobie funkcję, która jest dopisana do prototypu array. Funkcję, która ma zwrócić pierwszy element tablicy.
Ok, chyba nie będziemy zaskoczeni, że tak to wygląda:
Array.prototype.first = function(){
return this[0];
};
console.log([1,2,3].first()); //1
console.log([].first()); //undefined
Teraz pytanie, czy powinniśmy robić jakieś mechanizmy obsługi błędów typu sprawdź, czy długość to nie jest 0. Pytanie, co byśmy wtedy zwrócili:
- Można null, ale null to też może być element tablicy
- -1 jest kuszące, ale -1 też może być elementem tablicy
- Error mógłby być, ale w JS nie ma czegoś takiego jak error wynikający z nieistniejącego indeksu, nie byłoby to standardowe
- Można dać return undefined, ale to właśnie nasza funkcja robi bez żadnego sprawdzania, gdy prosimy o jakikolwiek indeks, który nie istnieje
Ok, to by było na tyle. Więcej JavaScripta niedługo!