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
Post a Comment