JavaScript Flashcards
HOF
Higher Order Functions
Funkcije koje ispunjavaju jedan od dva kriterijuma:
1. Primaju funkciju kao argument
2. Vraćaju funkciju kao rezultat
One omogućavaju tretiranje funkcija kao first class citizens što znači dase funkcije mogu prosleđivati, čuvati u promenljivima ili vraćati kao rezultati funkcija
function applyOperation(num1, num2, operation) {
return operation(num1, num2);
}
// Primer funkcija koje se prosleđuju kao argumenti
function add(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
// Korišćenje
console.log(applyOperation(5, 3, add)); // Rezultat: 8
console.log(applyOperation(5, 3, multiply)); // Rezultat: 15
Na backend strani HOF se koriste za kreiranje middleware-a
map(), filter() i reduce() su odlični primeri HOF
map()
Metoda ugrađena u JS koja se koristi za kreiranje novog niza tako što primenjuje funkciju na svaki element postojećeg niza. Ona ne menja originalni niz, već vraća novi niz sa transformisanim podacima.
array.map(callback(element, index, array), thisArg)
array.map(callback(element))
index, array i thisArg su opcioni
Prototype Chaining
Object() je konstruktorska funkcija koja se može smatrati majkom svih objekata. Svi objekti u JS su nastali od ove funkcije. Konstruktorska funkcija ima razne metode i dva svojstva:
1. Object.length (čudno svojstvo, uvek vraća 1)
2. Object.prototype - ovo svojstvo konstruktorske funkcije Object() je tipa objekat i zaduženo je da prosleđuje metode i svojstva svim novogenerisanim objektima
Kada se kreira objekat on dobije privatno svojstvo [[Prototype]] kojem se pristupa preko __proto__ i ono pokazuje na Object.prototype objekat
const obj = {}; // Kreiranje objekta literalom
console.log(obj.__proto__ === Object.prototype); // true
console.log(obj.constructor === Object); // true
Object.prototype
SVOJSTVA:
1. .constructor
2. __proto__
METODE:
1. hasOwnProperty()
2. isPrototypeOf()
3. propertyIsEnumerable()
4. toString()
5. valueOf()
filter()
Metoda koja omogućava kreiranje novog niza filtriranjem elemenata iz postojećeg niza na osnovu datog uslova
const newArray = array.filter(callback(element, index, array), thisArg);
Ne menja originalni niz i vraća originalni niz
every() and some()
Metode koje se koriste za proveru elemenata u nizu na osnovu logike definisane u callback funkciji. Vraćaju true ili false.
array.every(callback(element, index, array), thisArg)
array.some(callback(element, index, array), thisArg)
call(), apply() i bind()
Metode koje omogućavaju eksplicitno postavljanje konteksta (this) za funkcije.
call():
func.call(thisArg, arg1, arg2, …)
call() se pored promene konteksta (this) može koristiti i za pozajmljivanje metoda. Jedan objekat može koristiti metodu drugog objekta.
const person1 = { name: “Maja” };
const person2 = { name: “Nikola” };
function introduce() {
console.log(Hello, I am ${this.name}.
);
}
introduce.call(person1); // Hello, I am Maja.
introduce.call(person2); // Hello, I am Nikola.
apply()
Gotovo identična metodi call() ali se argumenti prosleđuju kao niz
func.apply(thisArg, [arg1, arg2, …])
bind()
Ne poziva odmah funkciju kao call() i apply()
func.bind(thisArg, arg1, arg2, …)
reduce()
reduce() metoda prolazi kroz svaki element niza, koristi funkciju koju definišemo da ažurira akumulator (vrednost koja se prenosi kroz iteracije) i vraća konačni rezultat nakon završetka tih iteracija
Get a single value from an array.
Reduce into single value.
array.reduce((accumulator, currentValue) => {
//logika
return accumulator;
}, initialValue)
Primer:
numbers.reduce((acc, num) => {
return acc+num;
}, 0)
Ako izostavimo initialValue, 1. element niza je initial value
reduce() under the hood
function(array, callback, initialValue) {
let accumulator = initialValue;
let startIndex =0;
if(accumulator == undefined) {
accumulator = array[0];
startIndex =1;
}
for(let i= startIndexl i <= array.length; i++) {
accumulator = callback(accumulator, array[i], i, array)
}
return accumulator
}