जावास्क्रिप्ट में फ़ंक्शन आमंत्रण विधियाँ
जावास्क्रिप्ट में, फ़ंक्शंस को विभिन्न तरीकों से लागू किया जा सकता है, और आमतौर पर इस्तेमाल की जाने वाली दो विधियाँ `कॉल` और `अप्लाई` हैं। ये विधियाँ आपको उस संदर्भ (`यह` मान) को नियंत्रित करने की अनुमति देती हैं जिसमें फ़ंक्शन निष्पादित होता है। कुशल और प्रभावी जावास्क्रिप्ट कोड लिखने के लिए `कॉल` और `अप्लाई` के बीच अंतर को समझना महत्वपूर्ण है।
यह आलेख किसी फ़ंक्शन को लागू करते समय `Function.prototype.call()` और `Function.prototype.apply()` के बीच अंतर की पड़ताल करता है। हम उनके सिंटैक्स, उपयोग के मामलों और संभावित प्रदर्शन अंतरों की जांच करेंगे। इस लेख के अंत तक, आपको इस बात की स्पष्ट समझ हो जाएगी कि कब 'लागू करें' के स्थान पर 'कॉल' का उपयोग करना है और इसका विपरीत कब करना है।
आज्ञा | विवरण |
---|---|
Function.prototype.call() | किसी फ़ंक्शन को दिए गए मान और तर्कों के साथ व्यक्तिगत रूप से कॉल करता है। |
Function.prototype.apply() | दिए गए इस मान के साथ एक फ़ंक्शन को कॉल करता है, और एक सरणी के रूप में तर्क प्रदान किए जाते हैं। |
this | उस ऑब्जेक्ट को संदर्भित करता है जिससे फ़ंक्शन को कॉल किया गया था, जो गतिशील संदर्भ असाइनमेंट की अनुमति देता है। |
console.log() | डिबगिंग उद्देश्यों के लिए कंसोल पर संदेश या वेरिएबल प्रिंट करता है। |
res.writeHead() | Node.js सर्वर में HTTP स्थिति कोड और प्रतिक्रिया हेडर सेट करता है। |
res.end() | Node.js सर्वर में प्रतिक्रिया प्रक्रिया को समाप्त करता है, यह संकेत देता है कि सभी डेटा भेज दिया गया है। |
http.createServer() | आने वाले अनुरोधों को सुनते हुए, Node.js में एक HTTP सर्वर इंस्टेंस बनाता है। |
listen() | HTTP सर्वर प्रारंभ करता है, जिससे यह एक निर्दिष्ट पोर्ट पर सुनने की अनुमति देता है। |
जावास्क्रिप्ट में कॉल और अप्लाई के उपयोग को समझना
प्रदान की गई स्क्रिप्ट उपयोग करने के बीच के अंतर को दर्शाती है Function.prototype.call() और Function.prototype.apply() जावास्क्रिप्ट में. दोनों विधियों का उपयोग किसी निर्दिष्ट फ़ंक्शन को प्रारंभ करने के लिए किया जाता है this प्रसंग। पहले उदाहरण में, call() विधि का प्रयोग आह्वान करने के लिए किया जाता है fullName विभिन्न वस्तुओं पर विधि (person1 और person2), प्रत्येक वस्तु के गुणों को अलग-अलग तर्कों के रूप में पारित करना। जब तर्कों की संख्या ज्ञात और निश्चित हो तो यह विधि संक्षिप्त वाक्यविन्यास की अनुमति देती है। दूसरा उदाहरण इसके उपयोग को दर्शाता है apply() विधि, जो के समान है call() लेकिन अलग-अलग तर्कों के बजाय तर्कों की एक श्रृंखला लेता है। यह लचीलापन विशेष रूप से तब उपयोगी होता है जब तर्कों की संख्या परिवर्तनशील होती है या किसी सरणी स्रोत से आती है।
Node.js बैकएंड उदाहरण में, call() विधि का उपयोग HTTP सर्वर के भीतर किया जाता है http.createServer(). यह उदाहरण इस बात पर प्रकाश डालता है कि कैसे this HTTP अनुरोधों पर गतिशील रूप से प्रतिक्रिया देने के लिए संदर्भ को सर्वर-साइड जावास्क्रिप्ट में हेरफेर किया जा सकता है। सर्वर अभिवादन के साथ प्रतिक्रिया करता है, यह दर्शाता है कि कैसे call() विधि के संदर्भ को बदल सकती है greet समारोह। अंत में, संयुक्त फ्रंटएंड और बैकएंड उदाहरण दिखाता है कि दोनों कैसे हैं call() और apply() अधिक गतिशील फ़ंक्शन में उपयोग किया जा सकता है। का उपयोग करके call() व्यक्तिगत तर्कों के साथ और apply() तर्कों की एक श्रृंखला के साथ, स्क्रिप्ट गतिशील रूप से उपयोगकर्ता विवरण उत्पन्न करती है, जो क्लाइंट-साइड और सर्वर-साइड जावास्क्रिप्ट विकास दोनों में इन विधियों के व्यावहारिक अनुप्रयोगों को दर्शाती है।
फंक्शन इनवोकेशन के लिए जावास्क्रिप्ट में कॉल और तरीकों का उपयोग करना
जावास्क्रिप्ट फ्रंटएंड स्क्रिप्ट
// 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() लागू करना
जावास्क्रिप्ट फ्रंटएंड स्क्रिप्ट
// 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 बैकएंड उदाहरण कॉल का उपयोग करना और आवेदन करना
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/');
डायनामिक फ़ंक्शन के साथ कॉल और अप्लाई को संयोजित करना
जावास्क्रिप्ट पूर्ण स्टैक स्क्रिप्ट
// 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.
जावास्क्रिप्ट में संदर्भ हेरफेर की खोज
के मूल उपयोग से परे call() और apply()अधिक जटिल और शक्तिशाली कोड बनाने के लिए इन विधियों को अन्य जावास्क्रिप्ट सुविधाओं के साथ जोड़ा जा सकता है। उदाहरण के लिए, इन्हें अक्सर संयोजन के रूप में उपयोग किया जाता है bind(), जो एक निर्दिष्ट के साथ एक नया फ़ंक्शन लौटाता है this कीमत। भिन्न call() और apply(), जो तुरंत फ़ंक्शन को प्रारंभ करता है, bind() इसका उपयोग एक बाध्य फ़ंक्शन बनाने के लिए किया जा सकता है जिसे बाद में एक सुसंगत संदर्भ के साथ बुलाया जा सकता है। यह इवेंट हैंडलिंग में विशेष रूप से उपयोगी है, जहां आप यह सुनिश्चित करना चाहेंगे कि कोई फ़ंक्शन किसी विशेष ऑब्जेक्ट के संदर्भ को बनाए रखता है, भले ही वह विभिन्न वातावरणों में निष्पादित हो।
एक अन्य उन्नत उपयोग के मामले में एक वस्तु से दूसरे के साथ उपयोग के लिए उधार लेने के तरीके शामिल हैं। इसका उपयोग करके इसे प्राप्त किया जा सकता है call() या apply() किसी विधि को अस्थायी रूप से किसी भिन्न ऑब्जेक्ट से बांधना। उदाहरण के लिए, सरणी विधियाँ जैसे slice() या push() इसे उधार लिया जा सकता है और सरणी-जैसी वस्तुओं जैसे फ़ंक्शंस में तर्क ऑब्जेक्ट पर लागू किया जा सकता है। यह तकनीक कोड के अधिक लचीलेपन और पुन: प्रयोज्यता की अनुमति देती है, क्योंकि यह तरीकों को दोहराव के बिना विभिन्न वस्तुओं में साझा करने में सक्षम बनाती है।
जावास्क्रिप्ट में कॉल और आवेदन के बारे में सामान्य प्रश्न
- के बीच मुख्य अंतर क्या है call() और apply()?
- मुख्य अंतर यह है call() जबकि, तर्कों की एक सूची स्वीकार करता है apply() तर्कों की एक श्रृंखला स्वीकार करता है।
- आपको कब उपयोग करना चाहिए apply() ऊपर call()?
- आपको उपयोग करना चाहिए apply() जब आपके पास तर्कों की एक श्रृंखला हो या किसी फ़ंक्शन में तर्कों की एक चर संख्या पारित करने की आवश्यकता हो।
- क्या इनके बीच प्रदर्शन में अंतर है? call() और apply()?
- आम तौर पर, इनके बीच कोई महत्वपूर्ण प्रदर्शन अंतर नहीं होता है call() और apply(). कोई भी मतभेद आमतौर पर नगण्य होता है।
- कर सकना apply() गणित विधियों के साथ प्रयोग किया जा सकता है?
- हाँ, apply() जैसे संख्याओं की एक सारणी को गणित विधियों में पारित करने के लिए उपयोग किया जा सकता है Math.max() या Math.min().
- क्या है Function.prototype.bind()?
- bind() एक नया फ़ंक्शन बनाता है, जिसे कॉल करने पर उसका अपना फ़ंक्शन होता है this नए फ़ंक्शन को कॉल करने पर दिए गए किसी भी तर्क से पहले दिए गए तर्कों के अनुक्रम के साथ, कीवर्ड को दिए गए मान पर सेट किया जाता है।
- कैसे कर सकते हैं call() उधार लेने के तरीकों का उपयोग किया जाएगा?
- आप उपयोग कर सकते हैं call() एक ऑब्जेक्ट से विधियों को उधार लेना और उन्हें किसी अन्य ऑब्जेक्ट पर उपयोग करना, फ़ंक्शन की प्रतिलिपि बनाए बिना विधि के पुन: उपयोग की अनुमति देना।
- क्या इसका उपयोग संभव है call() या apply() कंस्ट्रक्टर्स के साथ?
- नहीं, कंस्ट्रक्टर्स को सीधे नहीं बुलाया जा सकता call() या apply(). इसके बजाय, आप उपयोग कर सकते हैं Object.create() वंशानुक्रम पैटर्न के लिए.
- सारणी-जैसी वस्तुएँ क्या हैं, और कैसे होती हैं call() और apply() उनके साथ काम करें?
- सरणी-जैसी वस्तुएं ऐसी वस्तुएं होती हैं जिनमें लंबाई गुण और अनुक्रमित तत्व होते हैं। call() और apply() इन वस्तुओं में हेरफेर करने के लिए उपयोग किया जा सकता है जैसे कि वे सरणी हों।
जावास्क्रिप्ट में कॉल और अप्लाई के उपयोग का सारांश
जावास्क्रिप्ट में, call() और apply() को नियंत्रित करने के लिए आवश्यक हैं this कार्यों के भीतर संदर्भ। call() व्यक्तिगत तर्कों को पारित करने की अनुमति देता है, जिससे यह ज्ञात और निश्चित तर्कों के लिए उपयुक्त हो जाता है। इसके विपरीत, apply() परिवर्तनीय तर्क सूचियों के लिए लचीलापन प्रदान करते हुए, तर्कों की एक श्रृंखला लेता है। दोनों विधियाँ कोड पुन: प्रयोज्यता और गतिशील फ़ंक्शन आमंत्रण को बढ़ाती हैं, चाहे फ्रंटएंड डेवलपमेंट में हो या Node.js वातावरण में। स्वच्छ, कुशल जावास्क्रिप्ट कोड लिखने के लिए इन विधियों का प्रभावी ढंग से उपयोग कब और कैसे करना है, यह समझना महत्वपूर्ण है।