„JavaScript“ skirtumo tarp skambučio ir taikymo supratimas

JavaScript

Funkcijų iškvietimo metodai „JavaScript“.

„JavaScript“ sistemoje funkcijos gali būti iškviestos įvairiais būdais, o du dažniausiai naudojami metodai yra „call“ ir „apply“. Šie metodai leidžia valdyti kontekstą („šią“ reikšmę), kuriame funkcija vykdoma. Norint rašyti efektyvų ir efektyvų „JavaScript“ kodą, labai svarbu suprasti skirtumą tarp „skambinti“ ir „taikyti“.

Šiame straipsnyje nagrinėjami skirtumai tarp „Function.prototype.call()“ ir „Function.prototype.apply()“, kai iškviečiama funkcija. Išnagrinėsime jų sintaksę, naudojimo atvejus ir galimus veikimo skirtumus. Šio straipsnio pabaigoje aiškiai suprasite, kada naudoti „skambinti“ per „taikyti“ ir atvirkščiai.

komandą apibūdinimas
Function.prototype.call() Iškviečia funkciją su nurodyta šia verte ir atskirais argumentais.
Function.prototype.apply() Iškviečia funkciją su nurodyta šia verte, o argumentai pateikiami kaip masyvas.
this Nurodo objektą, iš kurio buvo iškviesta funkcija, todėl galima dinamiškai priskirti kontekstą.
console.log() Spausdina pranešimus arba kintamuosius į konsolę derinimo tikslais.
res.writeHead() Nustato HTTP būsenos kodą ir atsako antraštes Node.js serveryje.
res.end() Baigiamas atsakymo procesas Node.js serveryje, pranešant, kad visi duomenys išsiųsti.
http.createServer() Sukuria HTTP serverio egzempliorių Node.js, klausydamas gaunamų užklausų.
listen() Paleidžia HTTP serverį, leidžiantį klausytis per nurodytą prievadą.

Supratimas apie skambučio ir taikymo naudojimą „JavaScript“.

Pateikti scenarijai iliustruoja naudojimo skirtumus ir JavaScript. Abu metodai naudojami funkcijoms su nurodytu iškviesti kontekste. Pirmajame pavyzdyje, call() metodas naudojamas iškviesti metodas įvairiems objektams ( ir ), perduodant kiekvieno objekto savybes kaip atskirus argumentus. Šis metodas leidžia glausti sintaksę, kai žinomas ir fiksuotas argumentų skaičius. Antrasis pavyzdys parodo, kaip naudojamas apply() metodas, kuris yra panašus į bet vietoj atskirų argumentų imasi daugybė. Šis lankstumas ypač naudingas, kai argumentų skaičius yra kintamas arba gaunamas iš masyvo šaltinio.

Node.js fono pavyzdyje metodas naudojamas HTTP serveryje, sukurtame su . Šis pavyzdys parodo, kaip kontekstu galima manipuliuoti serverio JavaScript, kad būtų galima dinamiškai atsakyti į HTTP užklausas. Serveris atsako sveikindamas, parodydamas, kaip call() metodas gali pakeisti kontekstą funkcija. Galiausiai, kombinuotas priekinės ir užpakalinės dalies pavyzdys parodo, kaip abu ir gali būti naudojamas dinamiškesnėje funkcijoje. Naudojant call() su individualiais argumentais ir Turėdamas daugybę argumentų, scenarijus dinamiškai generuoja vartotojo informaciją, iliustruodamas praktinį šių metodų pritaikymą tiek kliento, tiek serverio pusės JavaScript kūrimui.

Skambučių ir metodų taikymas „JavaScript“ funkcijų iškvietimui

„JavaScript“ sąsajos scenarijus

// Example 1: Using Function.prototype.call()
const person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
};
const person1 = {
    firstName: "John",
    lastName: "Doe"
};
const person2 = {
    firstName: "Jane",
    lastName: "Smith"
};
// Call the fullName method on person1 and person2
console.log(person.fullName.call(person1)); // Output: John Doe
console.log(person.fullName.call(person2)); // Output: Jane Smith

Function.prototype.apply() taikymas lanksčiam argumentų perdavimui

„JavaScript“ sąsajos scenarijus

// Example 2: Using Function.prototype.apply()
const person = {
    fullName: function(city, country) {
        return this.firstName + " " + this.lastName + ", " + city + ", " + country;
    }
};
const person1 = {
    firstName: "John",
    lastName: "Doe"
};
const person2 = {
    firstName: "Jane",
    lastName: "Smith"
};
// Apply the fullName method with arguments on person1 and person2
console.log(person.fullName.apply(person1, ["New York", "USA"])); // Output: John Doe, New York, USA
console.log(person.fullName.apply(person2, ["London", "UK"])); // Output: Jane Smith, London, UK

Node.js Backend pavyzdys Iškviesti ir taikyti

JavaScript Backend scenarijus su Node.js

// Load the required modules
const http = require('http');
// Create a server object
http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    // Example using call()
    function greet() {
        return 'Hello ' + this.name;
    }
    const user = { name: 'Alice' };
    res.write(greet.call(user)); // Output: Hello Alice
    res.end();
}).listen(3000);
console.log('Server running at http://localhost:3000/');

Skambinimo ir prašymo derinimas su dinamine funkcija

„JavaScript“ viso kamino scenarijus

// Define a function to display user details
function displayDetails(age, profession) {
    return this.name + " is " + age + " years old and works as a " + profession + ".";
}
// User objects
const user1 = { name: 'Bob' };
const user2 = { name: 'Alice' };
// Use call to invoke displayDetails
console.log(displayDetails.call(user1, 30, 'Engineer')); // Output: Bob is 30 years old and works as a Engineer.
// Use apply to invoke displayDetails
console.log(displayDetails.apply(user2, [28, 'Doctor'])); // Output: Alice is 28 years old and works as a Doctor.

„JavaScript“ konteksto manipuliavimo tyrinėjimas

Be pagrindinio naudojimo ir , šiuos metodus galima derinti su kitomis „JavaScript“ funkcijomis, kad būtų sukurtas sudėtingesnis ir galingesnis kodas. Pavyzdžiui, jie dažnai naudojami kartu su , kuri grąžina naują funkciją su nurodyta this vertė. Skirtingai nei ir , kurios iš karto iškviečia funkciją, gali būti naudojamas kuriant susietą funkciją, kurią vėliau galima iškviesti naudojant nuoseklų kontekstą. Tai ypač naudinga tvarkant įvykius, kai galbūt norėsite užtikrinti, kad funkcija išlaikytų konkretaus objekto kontekstą, net kai ji vykdoma skirtingose ​​aplinkose.

Kitas išplėstinio naudojimo atvejis apima metodų skolinimąsi iš vieno objekto, kad būtų galima naudoti su kitu. Tai galima pasiekti naudojant arba laikinai susieti metodą su kitu objektu. Pavyzdžiui, masyvo metodai, tokie kaip arba push() Galima pasiskolinti ir pritaikyti į masyvą panašiems objektams, pvz., funkcijų argumentų objektui. Ši technika suteikia didesnį kodo lankstumą ir pakartotinį naudojimą, nes leidžia metodus dalytis skirtinguose objektuose be dubliavimo.

  1. Koks yra pagrindinis skirtumas tarp ir ?
  2. Pagrindinis skirtumas yra tas priima argumentų sąrašą, tuo tarpu priima daugybę argumentų.
  3. Kada turėtumėte naudoti baigta ?
  4. Turėtumėte naudoti kai turite argumentų masyvą arba funkcijai turite perduoti kintamą argumentų skaičių.
  5. Ar yra našumo skirtumų tarp ir ?
  6. Paprastai tarp jų nėra didelių našumo skirtumų ir . Bet kokie skirtumai paprastai yra nereikšmingi.
  7. Gali naudoti su matematikos metodais?
  8. taip, gali būti naudojamas perduoti skaičių masyvą matematikos metodams, pvz arba .
  9. Kas yra ?
  10. sukuria naują funkciją, kurią iškvietus ji turi raktinis žodis, nustatytas į pateiktą reikšmę, su nurodyta argumentų seka prieš bet kurį pateiktą, kai iškviečiama nauja funkcija.
  11. Kaip gali panaudoti metodams pasiskolinti?
  12. Tu gali naudoti pasiskolinti metodus iš vieno objekto ir naudoti juos kitame objekte, leidžiantį pakartotinai naudoti metodą nenukopijuojant funkcijos.
  13. Ar galima naudoti arba su konstruktoriais?
  14. Ne, negalima tiesiogiai iškviesti konstruktorių arba . Vietoj to galite naudoti paveldėjimo modeliams.
  15. Kas yra į masyvą panašūs objektai ir kaip tai padaryti ir dirbti su jais?
  16. Į masyvą panašūs objektai yra objektai, turintys ilgio savybę ir indeksuotus elementus. ir gali būti naudojamas manipuliuoti šiais objektais taip, tarsi jie būtų masyvai.

„JavaScript“, ir yra būtini norint kontroliuoti funkcijų kontekste. call() leidžia perduoti atskirus argumentus, todėl tinka žinomiems ir fiksuotiems argumentams. Priešingai, paima daugybę argumentų, suteikiančių lankstumo kintamiesiems argumentų sąrašams. Abu metodai pagerina kodo pakartotinį naudojimą ir dinaminių funkcijų iškvietimą, nesvarbu, ar tai būtų sąsaja, ar Node.js aplinkoje. Norint rašyti švarų ir efektyvų „JavaScript“ kodą, labai svarbu suprasti, kada ir kaip efektyviai naudoti šiuos metodus.