Funkcijas izsaukšanas metodes JavaScript
Programmā JavaScript funkcijas var izsaukt dažādos veidos, un divas biežāk izmantotās metodes ir “call” un “apply”. Šīs metodes ļauj kontrolēt kontekstu (šo vērtību), kurā funkcija tiek izpildīta. Izpratne par atšķirību starp “zvanīt” un “pielietot” ir ļoti svarīga efektīva un efektīva JavaScript koda rakstīšanai.
Šajā rakstā ir apskatītas atšķirības starp `Function.prototype.call()` un `Function.prototype.apply()`, izsaucot funkciju. Mēs pārbaudīsim to sintaksi, lietošanas gadījumus un iespējamās veiktspējas atšķirības. Līdz šī raksta beigām jums būs skaidra izpratne par to, kad lietot zvanīt, izmantojot lietotni un otrādi.
Komanda | Apraksts |
---|---|
Function.prototype.call() | Izsauc funkciju ar dotu šo vērtību un atsevišķi sniegtiem argumentiem. |
Function.prototype.apply() | Izsauc funkciju ar doto šo vērtību un argumentus nodrošina kā masīvu. |
this | Attiecas uz objektu, no kura funkcija tika izsaukta, ļaujot dinamiski piešķirt kontekstu. |
console.log() | Izdrukā ziņojumus vai mainīgos konsolē atkļūdošanas nolūkos. |
res.writeHead() | Node.js serverī iestata HTTP statusa kodu un atbildes galvenes. |
res.end() | Pabeidz atbildes procesu Node.js serverī, norādot, ka visi dati ir nosūtīti. |
http.createServer() | Izveido HTTP servera gadījumu pakalpojumā Node.js, uzklausot ienākošos pieprasījumus. |
listen() | Startē HTTP serveri, ļaujot tam klausīties norādītajā portā. |
Izpratne par zvana un pieteikšanās lietojumu JavaScript
Piedāvātie skripti ilustrē atšķirības starp lietošanu Function.prototype.call() un Function.prototype.apply() JavaScript. Abas metodes tiek izmantotas, lai izsauktu funkcijas ar norādīto this kontekstā. Pirmajā piemērā call() metode tiek izmantota, lai izsauktu fullName metode uz dažādiem objektiem (person1 un person2), nododot katra objekta īpašības kā atsevišķus argumentus. Šī metode ļauj izmantot kodolīgu sintaksi, ja ir zināms un fiksēts argumentu skaits. Otrais piemērs parāda apply() metode, kas ir līdzīga call() bet atsevišķu argumentu vietā izmanto vairākus argumentus. Šī elastība ir īpaši noderīga, ja argumentu skaits ir mainīgs vai nāk no masīva avota.
Node.js aizmugursistēmas piemērā call() metode tiek izmantota HTTP serverī, kas izveidots ar http.createServer(). Šis piemērs parāda, kā this kontekstu var manipulēt servera puses JavaScript, lai dinamiski atbildētu uz HTTP pieprasījumiem. Serveris atbild ar sveicienu, parādot, kā call() metode var mainīt kontekstu greet funkcija. Visbeidzot, apvienotais priekšgala un aizmugursistēmas piemērs parāda, kā abi call() un apply() var izmantot dinamiskākā funkcijā. Izmantojot call() ar individuāliem argumentiem un apply() Ar virkni argumentu skripts dinamiski ģenerē lietotāja informāciju, ilustrējot šo metožu praktisko pielietojumu gan klienta, gan servera puses JavaScript izstrādē.
Izsaukšanas un metožu izmantošana JavaScript programmā funkciju izsaukšanai
JavaScript priekšgala skripts
// 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() lietošana elastīgai argumentu nodošanai
JavaScript priekšgala skripts
// 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 aizmugursistēmas piemērs, izmantojot zvanu un lietot
JavaScript aizmugursistēmas skripts ar 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/');
Zvana un pieteikuma apvienošana ar dinamisko funkciju
JavaScript Full Stack skripts
// 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.
Konteksta manipulāciju izpēte JavaScript
Papildus pamata lietojumam call() un apply(), šīs metodes var apvienot ar citiem JavaScript līdzekļiem, lai izveidotu sarežģītāku un jaudīgāku kodu. Piemēram, tos bieži izmanto kopā ar bind(), kas atgriež jaunu funkciju ar norādītu this vērtību. Atšķirībā no call() un apply(), kas nekavējoties izsauc funkciju, bind() var izmantot, lai izveidotu saistītu funkciju, kuru var izsaukt vēlāk ar konsekventu kontekstu. Tas ir īpaši noderīgi notikumu apstrādē, kur vēlaties nodrošināt, lai funkcija saglabātu konkrēta objekta kontekstu pat tad, ja tā tiek izpildīta dažādās vidēs.
Vēl viens uzlabots lietošanas gadījums ietver metožu aizņemšanos no viena objekta izmantošanai ar citu. To var panākt, izmantojot call() vai apply() lai īslaicīgi saistītu metodi ar citu objektu. Piemēram, masīva metodes, piemēram, slice() vai push() var aizņemties un lietot masīviem līdzīgiem objektiem, piemēram, argumentu objektam funkcijās. Šis paņēmiens nodrošina lielāku koda elastību un atkārtotu izmantošanu, jo tas ļauj koplietot metodes dažādos objektos bez dublēšanas.
Bieži uzdotie jautājumi par zvanu un pieteikšanos JavaScript
- Kāda ir galvenā atšķirība starp call() un apply()?
- Galvenā atšķirība ir tā call() pieņem argumentu sarakstu, kamēr apply() pieņem virkni argumentu.
- Kad vajadzētu lietot apply() beidzies call()?
- Jums vajadzētu izmantot apply() ja jums ir argumentu masīvs vai funkcijai ir jānodod mainīgs argumentu skaits.
- Vai pastāv veiktspējas atšķirības starp call() un apply()?
- Parasti starp tām nav būtisku veiktspējas atšķirību call() un apply(). Jebkādas atšķirības parasti ir nenozīmīgas.
- Var apply() izmantot ar matemātikas metodēm?
- Jā, apply() var izmantot, lai nodotu skaitļu masīvu matemātikas metodēm, piemēram Math.max() vai Math.min().
- Kas ir Function.prototype.bind()?
- bind() izveido jaunu funkciju, kurai, izsaucot, ir sava this atslēgvārds ir iestatīts uz norādīto vērtību, ar noteiktu argumentu secību pirms jebkura norādītā, kad tiek izsaukta jaunā funkcija.
- Kā var call() izmantot, lai aizņemtos metodes?
- Tu vari izmantot call() aizņemties metodes no viena objekta un izmantot tās citā objektā, ļaujot izmantot metodi atkārtoti, nekopējot funkciju.
- Vai ir iespējams izmantot call() vai apply() ar konstruktoriem?
- Nē, konstruktorus nevar tieši izsaukt call() vai apply(). Tā vietā jūs varat izmantot Object.create() mantojuma modeļiem.
- Kas ir masīviem līdzīgi objekti un kā to darīt call() un apply() strādāt ar viņiem?
- Masīviem līdzīgi objekti ir objekti, kuriem ir garuma rekvizīts un indeksēti elementi. call() un apply() var izmantot, lai manipulētu ar šiem objektiem tā, it kā tie būtu masīvi.
Izsaukuma un lietotnes lietojuma apkopojums JavaScript
JavaScript, call() un apply() ir būtiski, lai kontrolētu this konteksts funkcijās. call() ļauj nodot atsevišķus argumentus, padarot to piemērotu zināmiem un fiksētiem argumentiem. Turpretim apply() izmanto argumentu masīvu, nodrošinot elastīgumu mainīgo argumentu sarakstiem. Abas metodes uzlabo koda atkārtotu izmantošanu un dinamisku funkciju izsaukšanu neatkarīgi no tā, vai tās ir priekšgala izstrādes vai Node.js vidēs. Lai rakstītu tīru, efektīvu JavaScript kodu, ir ļoti svarīgi saprast, kad un kā šīs metodes izmantot efektīvi.