JavaScript funksiyasi "apply()"
apply() metodi call() metodiga juda o'xshash, u ham bir obyektning metodini boshqa obyekt uchun ishlatish (bog'lash) uchun xizmat qiladi.
call() va apply() o'rtasidagi farq
Asosiy farq argumentlarni qanday qabul qilishidadir:
call()argumentlarni alohida-alohida qabul qiladi (arg1, arg2, ...).apply()argumentlarni massiv (array) ko'rinishida qabul qiladi ([arg1, arg2, ...]).
Misol
js
const person = {
fullName: function (city, country) {
return this.firstName + ' ' + this.lastName + ', ' + city + ', ' + country
}
}
const person1 = {
firstName: 'John',
lastName: 'Doe'
}
// Argumentlar massiv ko'rinishida uzatilmoqda:
person.fullName.apply(person1, ['Oslo', 'Norway'])Massivlarda apply() metodidan foydalanish
apply() metodi massivlar bilan ishlashda juda qo'l keladi. Masalan, massiv ichidagi eng katta sonni topish uchun Math.max() funksiyasidan foydalansak bo'ladi.
Math.max() odatda massivni qabul qilmaydi, u alohida sonlarni kutadi. Lekin apply() orqali massivni unga uzatish mumkin.
Misol
js
const numbers = [5, 6, 2, 3, 7]
// Math.max.apply(null, numbers)
let max = Math.max.apply(null, [1, 2, 3]) // 3 qaytaradiNull nima uchun?
Math.max metodi this kontekstiga muhtoj emas, shuning uchun birinchi argumentga null yoki Math obyektining o'zi yuboriladi.
Zamonaviy muqobil: Spread operatori (...)
Hozirgi kunda (ES6+) apply() o'rniga ko'pincha "spread" operatoridan foydalanish qulayroq va osonroq:
Misol
js
const numbers = [5, 6, 2, 3, 7]
let max = Math.max(...numbers)