"Soita" ja "apply" eron ymmärtäminen JavaScriptissä

JavaScript

Funktioiden kutsumismenetelmät JavaScriptissä

JavaScript tarjoaa useita tapoja kutsua toimintoja, joista kaksi ovat "Function.prototype.call()" ja "Function.prototype.apply()". Molemmat menetelmät kutsuvat toimintoja tietyllä "this"-arvolla ja argumenteilla, mutta ne eroavat toisistaan ​​siinä, miten nämä argumentit välitetään.

Tämän artikkelin tarkoituksena on tutkia "soita" ja "käytä" eroja, niiden tehokkuusvaikutuksia ja skenaarioita, joissa toinen saattaisi olla parempi kuin toinen. Loppujen lopuksi ymmärrät paremmin, milloin JavaScript-koodissa tulee käyttää "soita" tai "apply".

Selvitä eroja "soita" ja "apply" välillä JavaScriptissä

Esimerkki JavaScript-käyttöliittymästä

// 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

JavaScriptin "soita" vs "apply" tehokkuuden ymmärtäminen

Esimerkki JavaScript-käyttöliittymästä

// 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

"Soita" ja "hae" vertaamalla funktion kutsua JavaScriptissä

Node.js-taustaohjelmaesimerkki

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

Valitse "soita" ja "käytä" JavaScript-kehityksessä

JavaScriptin suorituskykyanalyysi

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');

Syvempi näkemys JavaScriptin kutsumisesta ja menetelmien soveltamisesta

Peruskäyttönsä lisäksi ja sisältää useita edistyneitä käyttötapauksia, jotka voivat parantaa JavaScript-ohjelmointiasi. Yksi tällainen käyttötapaus on menetelmälainaus, jossa menetelmiä yhdestä objektista lainaa toinen. Tämä on erityisen hyödyllistä, kun sinulla on objekti, jonka on käytettävä menetelmää toisesta objektista ilman periytymistä. Käyttämällä ja apply(), voit lainata väliaikaisesti menetelmiä ja suorittaa niitä eri objektien yhteydessä, mikä parantaa koodin uudelleenkäytettävyyttä ja vähentää redundanssia.

Toinen tärkeä huomioitava näkökohta on käyttö variadic-funktioille – funktioille, jotka hyväksyvät vaihtelevan määrän argumentteja. Kun sinulla on joukko argumentteja ja sinun on välitettävä ne funktiolle, joka ei hyväksy taulukkoa, tulee erittäin kätevä. Toisaalta, voi olla hyödyllinen skenaarioissa, joissa suorituskyky on kriittinen ja argumenttien määrä on tiedossa ja kiinteä. Ymmärtämällä nämä vivahteet kehittäjät voivat tehdä tietoisempia päätöksiä käyttöajasta call() vastaan , optimoivat koodinsa luettavuuden ja suorituskyvyn kannalta.

  1. Mikä on ensisijainen ero ja ?
  2. hyväksyy argumentit yksilöllisesti, vaikka hyväksyy argumentit taulukkona.
  3. Voi ja käytetään vaihtokelpoisesti?
  4. Kyllä, he voivat saavuttaa saman tuloksen, mutta valinta riippuu argumenttien rakenteesta.
  5. Milloin minun pitäisi mieluummin yli ?
  6. Käyttää kun sinulla on joukko argumentteja tai muuttuva määrä argumentteja.
  7. Onko suorituskyvyssä eroa ja ?
  8. Suorituskykyerot ovat useimmissa tapauksissa mitättömiä, mutta voi olla hieman nopeampi kiinteällä määrällä argumentteja.
  9. Kuinka tehdä ja hoitaa konteksti?
  10. Molemmat menetelmät asettavat nimenomaisesti funktion kutsun konteksti.
  11. Voinko käyttää ja konstruktorifunktioilla?
  12. Ei, ne eivät sovellu rakentajafunktioille, koska ne eivät luo uusia ilmentymiä.
  13. Mihin jotkin edistyneet käyttötapaukset ovat ja ?
  14. Ne ovat hyödyllisiä menetelmän lainaamiseen ja variadic-funktioiden käsittelyyn.
  15. Kuinka parantaa koodin luettavuutta?
  16. tekee funktion kutsusta selkeämmän, kun argumenttien määrä on tiedossa ja kiinteä.
  17. Voi käsittelemään tuntemattoman määrän argumentteja?
  18. Joo, on ihanteellinen funktioille, jotka tarvitsevat vaihtelevan määrän argumentteja.

Viimeisiä ajatuksia funktioiden kutsumismenetelmistä

Lopuksi molemmat ja menetelmät ovat tehokkaita työkaluja JavaScriptissä funktioiden kutsumiseen määritetyllä tavalla arvo. Valinta niiden välillä riippuu suurelta osin siitä, kuinka haluat välittää argumentit funktiolle. Sillä aikaa call on paras, kun käsitellään kiinteää määrää argumentteja, loistaa käsiteltäessä taulukoita tai tuntematonta määrää argumentteja. Näiden vivahteiden ymmärtäminen auttaa kirjoittamaan tehokkaampaa ja luettavampaa koodia, mikä johtaa viime kädessä parempiin JavaScript-ohjelmointikäytäntöihin.