„JavaScript“ skirtumo tarp „skambinti“ ir „taikyti“ supratimas

JavaScript

Funkcijų iškvietimo metodai „JavaScript“.

„JavaScript“ siūlo keletą funkcijų iškvietimo būdų, iš kurių du yra „Function.prototype.call()“ ir „Function.prototype.apply()“. Abu metodai skirti iškviesti funkcijas su nurodyta „this“ verte ir argumentais, tačiau jie skiriasi tuo, kaip šie argumentai perduodami.

Šio straipsnio tikslas – ištirti skirtumus tarp „skambinti“ ir „taikyti“, jų poveikį našumui ir scenarijus, kai vienam gali būti teikiama pirmenybė prieš kitą. Pabaigoje aiškiau suprasite, kada „JavaScript“ kode naudoti „skambinti“ arba „taikyti“.

„JavaScript“ skirtumų tarp „skambinti“ ir „taikyti“ tyrinėjimas

„JavaScript“ sąsajos pavyzdys

// Example of Function.prototype.call()
const person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
};

const person1 = {
  firstName: "John",
  lastName: "Doe"
};

console.log(person.fullName.call(person1)); // John Doe

„JavaScript“ „skambinimo“ ir „taikyti“ našumo supratimas

„JavaScript“ sąsajos pavyzdys

// Example of Function.prototype.apply()
const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};

const person2 = {
  firstName: "Jane",
  lastName: "Doe"
};

console.log(person.fullName.apply(person2, ["Oslo", "Norway"])); // Jane Doe, Oslo, Norway

„JavaScript“ funkcijų iškvietimo „skambinti“ ir „taikyti“ palyginimas

Node.js Backend pavyzdys

const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};

const person3 = {
  firstName: "Alice",
  lastName: "Smith"
};

function printName(method) {
  if (method === 'call') {
    console.log(person.fullName.call(person3, 'Paris', 'France'));
  } else if (method === 'apply') {
    console.log(person.fullName.apply(person3, ['Paris', 'France']));
  }
}

printName('call');  // Alice Smith, Paris, France
printName('apply'); // Alice Smith, Paris, France

„JavaScript“ kūrimo programoje pasirinkimas tarp „skambinti“ ir „taikyti“.

„JavaScript“ našumo analizė

const iterations = 1000000;
const person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + ", " + city + ", " + country;
  }
};
const person4 = {
  firstName: "Bob",
  lastName: "Brown"
};

console.time('call');
for (let i = 0; i < iterations; i++) {
  person.fullName.call(person4, 'Berlin', 'Germany');
}
console.timeEnd('call');

console.time('apply');
for (let i = 0; i < iterations; i++) {
  person.fullName.apply(person4, ['Berlin', 'Germany']);
}
console.timeEnd('apply');

Gilesnė įžvalga apie iškvietimą ir metodų taikymą „JavaScript“.

Be pagrindinio naudojimo, ir turi keletą išplėstinių naudojimo atvejų, kurie gali pagerinti jūsų JavaScript programavimą. Vienas iš tokių panaudojimo atvejų yra metodo skolinimasis, kai metodai iš vieno objekto pasiskolinami kito. Tai ypač naudinga, kai turite objektą, kuriam reikia naudoti metodą iš kito objekto be paveldėjimo. Naudojant ir apply(), galite laikinai pasiskolinti metodus ir vykdyti juos skirtingų objektų kontekste, taip pagerindami kodo pakartotinį naudojimą ir sumažindami perteklinį skaičių.

Kitas svarbus aspektas, į kurį reikia atsižvelgti, yra naudojimas variadinėms funkcijoms – funkcijoms, kurios priima kintamą argumentų skaičių. Kai turite argumentų masyvą ir turite juos perduoti funkcijai, kuri nepriima masyvo, tampa itin patogus. Iš kitos pusės, gali būti naudinga scenarijuose, kai našumas yra labai svarbus, o argumentų skaičius yra žinomas ir fiksuotas. Suprasdami šiuos niuansus, kūrėjai gali priimti labiau pagrįstus sprendimus, kada naudoti call() prieš , optimizuodami savo kodą, kad būtų lengviau skaityti ir našiai.

  1. Koks yra pagrindinis skirtumas tarp ir ?
  2. argumentus priima individualiai, tuo tarpu priima argumentus kaip masyvą.
  3. Gali ir naudoti pakaitomis?
  4. Taip, jie gali pasiekti tą patį rezultatą, tačiau pasirinkimas priklauso nuo argumentų struktūros.
  5. Kada turėčiau teikti pirmenybę baigta ?
  6. Naudokite kai turite argumentų masyvą arba kintamą argumentų skaičių.
  7. Ar yra našumo skirtumas tarp ir ?
  8. Daugeliu atvejų našumo skirtumai yra nereikšmingi, tačiau gali būti šiek tiek greitesnis su fiksuotu argumentų skaičiumi.
  9. Kaip daryti ir tvarkyti kontekste?
  10. Abu metodai aiškiai nustato funkcijos iškvietimo kontekstą.
  11. Ar galiu naudoti ir su konstruktoriaus funkcijomis?
  12. Ne, jie netinka konstruktoriaus funkcijoms, nes nesukuria naujų egzempliorių.
  13. Kam skirti kai kurie išplėstinio naudojimo atvejai ir ?
  14. Jie naudingi skolinant metodus ir tvarkant įvairias funkcijas.
  15. Kaip pagerinti kodo skaitomumą?
  16. funkcijos iškvietimas tampa aiškesnis, kai žinomas ir fiksuotas argumentų skaičius.
  17. Gali tvarkyti nežinomą skaičių argumentų?
  18. taip, puikiai tinka funkcijoms, kurioms reikia apdoroti kintamą argumentų skaičių.

Baigiamosios mintys apie funkcijų iškvietimo metodus

Apibendrinant, tiek ir metodai yra galingi JavaScript įrankiai, skirti iškviesti funkcijas su nurodytu vertė. Pasirinkimas tarp jų labai priklauso nuo to, kaip norite perduoti argumentus funkcijai. Nors call geriausiai tinka sprendžiant fiksuotą argumentų skaičių, šviečia apdorojant masyvus arba nežinomą argumentų skaičių. Šių niuansų supratimas padeda rašyti efektyvesnį ir skaitomesnį kodą, o tai galiausiai lemia geresnę „JavaScript“ programavimo praktiką.