자바스크립트에서 call(), apply(), bind()

Javscriptda funksiya va qo'shimcha metodlarga prototip orqali qiymat o'rnatish bu juda ajoyib! ..... Ammo biz bunga qanday etishyapmiz?
this kalit so'zi orqali albatta!

Avvalthis kalit so'zini yaqindan tanib olishimiz uchun biroz vaqt ketdi, ammo u qanday ishlashini bilib olganimizdan keyin tushundikkithis kalit so'zi bu Javascriptda judayam foydali 기능.
this kalit so'zi doim funksiya ichida ishlatiladi va o'zi ishlatilingan funksiyani chaqiruvchi yagona obyektga murojaat qiladi.

Biroq, hayot ham mukammal emas. Ba'zidathis는 yo'qotib qo'yamiz를 참조합니다. Bunday vaziyatda this kalit so'ziga havolani qaytarish uchun turli hil hack ishlatishimizga to'g'ri keladi.

Ho'sh, shunday vaziyatda eng to'g'ri yechim nima?

call(), apply(), bind() - 다음과 같이 하십시오!

Hozirgacha biz funksiyalarni nomdan (ixtiyoriy, anonim funksiya ham boʻlishi mumkin) va u chaqirilganda bajaradigan koddan tashkil topgan obyektlar sifatida koʻrib chiqdik. 우리는 할 수 있습니다. Haqiqatni sevuvchi inson sifatida sizga shuni aytishim kerakki, funktsiya aslida quyidagi rasmga yaqinroq:



니마? 자보티르 올망! Endi biz har bir funktsiyada uchraydigan 3 ta o'xshash usullarni misollar bilan ko'rib chiqamiz. 타이요르미시즈?!

묶다()



bind() 메서드는 yangi funktsiyani yaratadi, u chaqirilganda this kalit so'z berilgan unga qiymatga o'rnatiladi.
this nihoyatda kuchli. Funksiya chaqirilganda bu metod bizga this kalit so'zini aniq qiymatini aniqlashga imkon beradi. Ushbu kodni ko'rib chiqamiz:

var pokemon = {
    firstname: 'Davron',
    lastname: 'Abduhakimov ',
    getPokeName: function() {
        var fullname = this.firstname + ' ' + this.lastname;
        return fullname;
    }
};

var pokemonName = function() {
    console.log(this.getPokeName() + 'I choose you!');
};

var logPokemon = pokemonName.bind(pokemon); // yangi obyekt yaratadi va pokemon ni bog'laydi. pokemondagi 'this' kalit so'zi endi === pokemon.

logPokemon(); // 'Davron Abduhakimov I choose you!'


Keling endi ushbu kodni bo'laklarga ajratib chiqamiz. bind() 방법은 다음과 같습니다.
1.JS 양기pokemonName 나무나시니 야라트모크다pokemon 니우닝this o'zgaruvchisi sifatida bog'lamoqda. BupokemonName funksiyasini nusxasi ekanini tushunish muhimdir.

2. PokemonName funksiyasining nusxasini yaratgandan so'ng, u dastlab pokemon obyektida bo'lmagan bo'lsa ham, logPokemon() ni chaqira oladi. Endi u pokemon obyektining xususiyatlari(Davron va Abduhakimov) va medotlarini taniydi.

Qizig'i shundaki, biz bind() orqali bog'laganimizdan so'ng, biz funktsiyadan xuddi boshqa har qanday oddiy funksiya kabi foydalanishimiz mumkin. Biz hatto parametrlarni qabul qilish va o'tkazish uchun funktsiyani yangilashimiz mumkin:

var pokemon = {
    firstname: 'Davron',
    lastname: 'Abduhakimov ',
    getPokeName: function() {
        var fullname = this.firstname + ' ' + this.lastname;
        return fullname;
    }
};

var pokemonName = function(snack, hobby) {
    console.log(this.getPokeName() + 'I choose you!');
    console.log(this.getPokeName() + ' loves ' + snack + ' and ' + hobby);
};

var logPokemon = pokemonName.bind(pokemon); // yangi obyekt yaratadi va pokemon ni bog'laydi. pokemondagi 'this' kalit so'zi endi === pokemon.

logPokemon('sushi', 'algorithms'); // Davron Abduhakimov  loves sushi and algorithms


호출(), 적용()



call() 메토디 funksiyani berilganthis qiymat va alohida berilgan argumentlar bilan birga chaqiradi.

Bu shuni anglatadiki, biz har qanday funksiyani chaqira olamiz va va chaqirilayotgan funksiya ichida this kalit so'zi nimaga murojaat qilayotganini aniq ko'rsatishimiz mumkin. bind() 메토디가 주다 옥스샤시.
bind() va call() metodlari orasidagi asosiy farq shundaki, call() 방법:
  • Qo'shimcha parametrlar ham qabul qiladi.
  • Darhol chaqirilgan funktsiyani ishga tushiradi.
  • call() metodi chaqirilayotgan funksiyaning nusxasini yaratmaydi.
  • call() va apply() deyarli bir hil. Ularning ishlashi o'rtasidagi yagona farq shundaki, call() barcha parametrlarni alohida-alohida qabul qilinishini kutadi, apply() esa barcha parametrlarni array sifatida kutadi, Misol:

        firstname: 'Davron',
        lastname: 'Abduhakimov ',
        getPokeName: function() {
            var fullname = this.firstname + ' ' + this.lastname;
            return fullname;
        }
    };
    
    var pokemonName = function(snack, hobby) {
        console.log(this.getPokeName() + ' loves ' + snack + ' and ' + hobby);
    };
    
    pokemonName.call(pokemon,'sushi', 'algorithms'); // Davron Abduhakimov loves sushi and algorithms
    pokemonName.apply(pokemon,['sushi', 'algorithms']); // Davron Abduhakimov  loves sushi and algorithms
    


    Har bir JS funktsiyasida mavjud bo'lgan bu 내장 metodlar juda foydali. Agar siz ularni kundalik dasturlashda qo'llamasangiz ham, boshqa dasturchilarning kodini o'qiyotganingizda unga tez-tez duch kelasiz.

    Savollaringiz bo'lsa, har doimgidek ❤요키Telegram ❤orqali bog'laning.

    좋은 웹페이지 즐겨찾기