자바스크립트에서 call(), apply(), bind()
this
kalit so'zi orqali albatta!Avval
this
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'zida
this
는 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 berilgan
this
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()
방법: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.
Reference
이 문제에 관하여(자바스크립트에서 call(), apply(), bind()), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dawroun/call-apply-bind-in-javascript-3dil텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)