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 Function.prototype.call() ir Function.prototype.apply() JavaScript. Abu metodai naudojami funkcijoms su nurodytu iškviesti this kontekste. Pirmajame pavyzdyje, call() metodas naudojamas iškviesti fullName metodas įvairiems objektams (person1 ir person2), 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 į call() 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 call() metodas naudojamas HTTP serveryje, sukurtame su http.createServer(). Šis pavyzdys parodo, kaip this 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ą greet funkcija. Galiausiai, kombinuotas priekinės ir užpakalinės dalies pavyzdys parodo, kaip abu call() ir apply() gali būti naudojamas dinamiškesnėje funkcijoje. Naudojant call() su individualiais argumentais ir apply() 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 call() ir apply(), š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 bind(), kuri grąžina naują funkciją su nurodyta this vertė. Skirtingai nei call() ir apply(), kurios iš karto iškviečia funkciją, bind() 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 call() arba apply() laikinai susieti metodą su kitu objektu. Pavyzdžiui, masyvo metodai, tokie kaip slice() 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.
Įprasti klausimai apie skambinimą ir paraišką „JavaScript“.
- Koks yra pagrindinis skirtumas tarp call() ir apply()?
- Pagrindinis skirtumas yra tas call() priima argumentų sąrašą, tuo tarpu apply() priima daugybę argumentų.
- Kada turėtumėte naudoti apply() baigta call()?
- Turėtumėte naudoti apply() kai turite argumentų masyvą arba funkcijai turite perduoti kintamą argumentų skaičių.
- Ar yra našumo skirtumų tarp call() ir apply()?
- Paprastai tarp jų nėra didelių našumo skirtumų call() ir apply(). Bet kokie skirtumai paprastai yra nereikšmingi.
- Gali apply() naudoti su matematikos metodais?
- taip, apply() gali būti naudojamas perduoti skaičių masyvą matematikos metodams, pvz Math.max() arba Math.min().
- Kas yra Function.prototype.bind()?
- bind() sukuria naują funkciją, kurią iškvietus ji turi this raktinis žodis, nustatytas į pateiktą reikšmę, su nurodyta argumentų seka prieš bet kurį pateiktą, kai iškviečiama nauja funkcija.
- Kaip gali call() panaudoti metodams pasiskolinti?
- Tu gali naudoti call() pasiskolinti metodus iš vieno objekto ir naudoti juos kitame objekte, leidžiantį pakartotinai naudoti metodą nenukopijuojant funkcijos.
- Ar galima naudoti call() arba apply() su konstruktoriais?
- Ne, negalima tiesiogiai iškviesti konstruktorių call() arba apply(). Vietoj to galite naudoti Object.create() paveldėjimo modeliams.
- Kas yra į masyvą panašūs objektai ir kaip tai padaryti call() ir apply() dirbti su jais?
- Į masyvą panašūs objektai yra objektai, turintys ilgio savybę ir indeksuotus elementus. call() ir apply() gali būti naudojamas manipuliuoti šiais objektais taip, tarsi jie būtų masyvai.
„JavaScript“ iškvietimo ir taikymo naudojimo apibendrinimas
„JavaScript“, call() ir apply() yra būtini norint kontroliuoti this funkcijų kontekste. call() leidžia perduoti atskirus argumentus, todėl tinka žinomiems ir fiksuotiems argumentams. Priešingai, apply() 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.