Funktsioonide kutsumismeetodid JavaScriptis
JavaScriptis saab funktsioone kutsuda mitmel viisil ja kaks tavaliselt kasutatavat meetodit on "call" ja "apply". Need meetodid võimaldavad teil juhtida konteksti (see väärtus), milles funktsioon käivitatakse. Tõhusa ja mõjusa JavaScripti koodi kirjutamiseks on ülioluline mõista, mis vahe on 'helista' ja 'rakendusel'.
Selles artiklis uuritakse funktsioonide „Function.prototype.call()” ja „Function.prototype.apply()” erinevusi funktsiooni käivitamisel. Uurime nende süntaksit, kasutusjuhtumeid ja võimalikke jõudluse erinevusi. Selle artikli lõpuks saate selgelt aru, millal kasutada käsku "helista" ja vastupidi.
Käsk | Kirjeldus |
---|---|
Function.prototype.call() | Kutsub funktsiooni antud väärtusega ja argumendid eraldi välja. |
Function.prototype.apply() | Kutsub välja antud väärtusega funktsiooni ja argumendid esitatakse massiivina. |
this | Viitab objektile, millelt funktsioon kutsuti, võimaldades dünaamilist konteksti määramist. |
console.log() | Prindib silumiseks konsooli sõnumid või muutujad. |
res.writeHead() | Määrab HTTP olekukoodi ja vastuse päised Node.js serveris. |
res.end() | Lõpetab vastuseprotsessi Node.js serveris, andes märku, et kõik andmed on saadetud. |
http.createServer() | Loob HTTP-serveri eksemplari rakenduses Node.js, kuulates sissetulevaid päringuid. |
listen() | Käivitab HTTP-serveri, võimaldades sellel määratud pordis kuulata. |
Kõne ja rakenduse kasutamise mõistmine JavaScriptis
Kaasasolevad skriptid illustreerivad kasutamise erinevusi ja JavaScriptis. Mõlemat meetodit kasutatakse määratud funktsiooniga funktsioonide kutsumiseks Sisu. Esimeses näites on call() kutsumiseks kasutatakse meetodit meetod erinevatel objektidel ( ja ), edastades iga objekti omadused üksikute argumentidena. See meetod võimaldab lühikest süntaksit, kui argumentide arv on teada ja fikseeritud. Teine näide demonstreerib apply() meetodiga, mis on sarnane kuid võtab üksikute argumentide asemel hulga argumente. See paindlikkus on eriti kasulik, kui argumentide arv on muutuv või pärineb massiivi allikast.
Node.js taustaprogrammi näites on meetodit kasutatakse HTTP-serveris, mis on loodud . See näide rõhutab, kuidas konteksti saab manipuleerida serveripoolses JavaScriptis, et HTTP-päringutele dünaamiliselt vastata. Server vastab tervitusega, näidates, kuidas call() meetod võib muuta konteksti funktsiooni. Lõpuks näitab kombineeritud esi- ja tagaprogrammi näide, kuidas mõlemad ja saab kasutada dünaamilisemas funktsioonis. Kasutades call() üksikute argumentidega ja Argumentide massiivi abil genereerib skript dünaamiliselt kasutaja üksikasju, illustreerides nende meetodite praktilisi rakendusi nii kliendi- kui ka serveripoolses JavaScripti arenduses.
Funktsiooni kutsumiseks JavaScripti kõnede ja rakenduste meetodite kasutamine
JavaScripti esikülje skript
// 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() rakendamine paindliku argumendi läbimiseks
JavaScripti esikülje skript
// 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 taustaprogrammi näide Helista ja rakenda
JavaScripti taustaprogrammi skript koos Node.js-iga
// 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/');
Helistamise ja taotlemise ühendamine dünaamilise funktsiooniga
JavaScripti täispinu skript
// 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.
Kontekstiga manipuleerimise uurimine JavaScriptis
Lisaks põhikasutusele ja , saab neid meetodeid keerukama ja võimsama koodi loomiseks kombineerida teiste JavaScripti funktsioonidega. Näiteks kasutatakse neid sageli koos , mis tagastab uue funktsiooni määratud väärtusega this väärtus. Erinevalt ja , mis käivitavad kohe funktsiooni, saab kasutada seotud funktsiooni loomiseks, mida saab hiljem järjepideva kontekstiga välja kutsuda. See on eriti kasulik sündmuste haldamisel, kus võiksite tagada, et funktsioon säilitab konkreetse objekti konteksti isegi siis, kui seda täidetakse erinevates keskkondades.
Veel üks täiustatud kasutusjuhtum hõlmab meetodite laenamist ühelt objektilt teisega kasutamiseks. Seda on võimalik saavutada kasutades või meetodi ajutiselt mõne teise objektiga sidumiseks. Näiteks massiivimeetodid nagu või push() saab laenata ja rakendada massiivilaadsetele objektidele, näiteks funktsioonide argumentide objektile. See tehnika võimaldab koodi suuremat paindlikkust ja korduvkasutatavust, kuna see võimaldab jagada meetodeid erinevate objektide vahel ilma dubleerimiseta.
- Mis on peamine erinevus ja ?
- Peamine erinevus seisneb selles aktsepteerib argumentide loendit, samas aktsepteerib hulga argumente.
- Millal peaksite kasutama läbi ?
- Sa peaksid kasutama kui teil on argumentide massiiv või kui teil on vaja funktsioonile edastada muutuv arv argumente.
- Kas on jõudluses erinevusi ja ?
- Üldiselt ei ole vahel olulisi jõudluse erinevusi ja . Kõik erinevused on tavaliselt tühised.
- Saab kasutada koos matemaatika meetoditega?
- jah, saab kasutada arvude massiivi edastamiseks matemaatikameetoditele nagu või .
- Mis on ?
- loob uue funktsiooni, millel on kutsumisel oma võtmesõna seatud etteantud väärtusele, kusjuures antud argumentide jada eelneb uue funktsiooni kutsumisel mis tahes pakutud argumentidele.
- Kuidas saab kasutada meetodite laenamiseks?
- Sa võid kasutada laenutada meetodeid ühelt objektilt ja kasutada neid teisel objektil, võimaldades meetodit uuesti kasutada ilma funktsiooni kopeerimata.
- Kas on võimalik kasutada või konstruktoritega?
- Ei, konstruktoreid ei saa otse välja kutsuda või . Selle asemel võite kasutada pärimismustrite jaoks.
- Mis on massiivilaadsed objektid ja kuidas seda teha ja nendega töötada?
- Massiivilaadsed objektid on objektid, millel on pikkusomadus ja indekseeritud elemendid. ja saab kasutada nende objektidega manipuleerimiseks nii, nagu need oleksid massiivid.
JavaScriptis ja on kontrollimiseks hädavajalikud funktsioonide kontekstis. call() võimaldab edastada üksikuid argumente, muutes selle sobivaks tuntud ja fikseeritud argumentide jaoks. Seevastu kasutab argumentide massiivi, pakkudes muutujate argumentide loendite jaoks paindlikkust. Mõlemad meetodid suurendavad koodi korduvkasutatavust ja funktsioonide dünaamilist väljakutsumist, olenemata sellest, kas tegemist on kasutajaliidese arenduse või Node.js-i keskkondadega. Puhta ja tõhusa JavaScripti koodi kirjutamiseks on oluline mõista, millal ja kuidas neid meetodeid tõhusalt kasutada.