javascript - Prototype "Bind" method issue -


  फ़ंक्शन.प्रोटोटाइप.बिंड = फ़ंक्शन () {var fn = this, args = Array.prototype.slice। कॉल (तर्क), वस्तु = args.shift (); वापसी कार्य () {return fn.apply (ऑब्जेक्ट, ** args.concat (Array.prototype.slice.call (arguments)) **); }; };  

यह फ़ंक्शन प्रोटोटाइप में है। क्या इसका बराबर है:

  फ़ंक्शन.प्रोटोटाइप.बिंड = फ़ंक्शन () {var fn = this, args = Array.prototype.slice.call (तर्क), ऑब्जेक्ट = args.shift () ; रिटर्न फ़ंक्शन () {return fn.apply (वस्तु, ** args **); }; };  

मेरी राय में, args.concat (Array.prototype.slice.call (arguments)) == आर्ग्स , क्योंकि अनाम फ़ंक्शन में कोई तर्क नहीं है । क्या बात है?

नहीं, वे समान नहीं हैं।

तर्कों को सम्मिलित करने का उद्देश्य कार्य (या) का एक तरीका प्रदान करना है, जब तर्क दिया जाता है कि जब बाँध का उपयोग किया जाता है और उस समय अधिक कार्य को जोड़ने में सक्षम होता है जब कि बाइंड रिटर्न का उपयोग किया जाता है, उदाहरण के लिए:

  var obj = {fx: function () {alert (Array.prototype.join.call (तर्क, ',')); }}; Var fx2 = obj.fx.bind (obj, 1, 2, 3); एफएक्स 2 (4, 5); // अलर्ट "1, 2, 3, 4, 5"  

जैसा कि आप कोड की अंतिम दो पंक्तियों में देख सकते हैं, जब मैं fx2 घोषित करता हूं I पहली तर्क के रूप में मीटिंग बीतने वाला obj (यह ऑब्जेक्ट के रूप में bind कार्यान्वयन के रूप में उपयोग किए जाने वाले संदर्भ को सुनिश्चित करेगा), तो मैं पास मान 1 , 2 और 3

उन मानों को args में संग्रहीत किया जाता है बाँध के बाह्य समापन के चर, तब जैसा कि आप बाँध कार्यान्वयन में देखते हैं, एक और फ़ंक्शन लौटा है।

मेरे उदाहरण में उस फ़ंक्शन को वापस लाया गया है fx2 असाइनमेंट के बाद, अंतिम पंक्ति में आप देख सकते हैं कि मैं उस फ़ंक्शन को कहता हूं, दो अतिरिक्त तर्कों को पारित कर रहा हूं।

अंत में लौटे गए फ़ंक्शन obj.fx दो तर्क सूचियों के साथ, bind ( 1 , 2 , 3 ) और तर्क जब फ़ंक्शन वास्तव में निष्पादित ( 4 , 5 )।

यही कारण है कि दो तर्क वस्तुओं को जोड़कर समझ में आता है।


Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

jquery - SimpleModal Confirm fails to submit form -

php - Multiple Select with Explode: only returns the word "Array" -