2013-04-06 2 views
5
myFunction.call(thisArg, arg1, arg2 ...) 

मेरे समझ है कि जब मैं call विधि का उपयोग करें और समारोह में एक thisArgthis मूल्य प्रदान मैं में पारित वस्तु पर सेट किया जाता है।Function.prototype.call के बजाय Function.prototype.bind का उपयोग क्यों करें?

myFunction.bind(thisArg, arg1, arg2 ...) 

और दूसरी तरफ bind विधि एक नया रिटर्न वस्तु मैं में।

पारित लेकिन क्या मुझे समझ नहीं आता क्यों बजाय bind का प्रयोग कर एक call की है करने के लिए नए कार्य सेट के this के संदर्भ के साथ कार्य करते हैं। अगर मैं ऐसा करना चाहता हूं तो this, call के संदर्भ को मेरे लिए पर्याप्त लगता है। फिर ब्राउज़रों IE8 और नीचे में टूटने पर बाध्य क्यों करें।

तो, bind का उपयोग करते समय call की तुलना में बेहतर केस बन जाता है?

+2

जब आप बाध्य फ़ंक्शन किसी और चीज़ को पास करना चाहते हैं। –

उत्तर

12

bind का उपयोग करते समय call की तुलना में बेहतर केस बन जाता है?

कॉलबैक।

यदि आपको यह सुनिश्चित करने की आवश्यकता है कि किसी विशेष ऑब्जेक्ट के संदर्भ में फ़ंक्शन को कॉल किया गया है, लेकिन फ़ंक्शन को कॉल करने के तरीके पर कोई नियंत्रण नहीं है (जैसे कि जब आप कॉलबैक के पैरामीटर के रूप में फ़ंक्शन को पास करते हैं), तो आप bind का उपयोग करें।

var f, 
    example; 
f = new Foo(); 
example = document.getElementById('example'); 

//`f.bar` is called in the context of `f` 
f.bar(); 

//`f.bar` will be called in the context of `example` 
example.addEventListener('click', f.bar); 

//`f.bar` will be called in the context of `f` 
example.addEventListener('click', f.bar.bind(f)); 
+2

मेरे बहुत नाराज थे, लेकिन इस उदाहरण के आधार पर यह [fiddle] (http://jsfiddle.net/JZ6aS/9/) बनाना मुझे इस विचार को साफ़ करने में मदद करता है। धन्यवाद!! – nimgrg

+0

पहेली ने मुझे भी thx के लिए स्पष्टीकरण में मदद की – jamie

संबंधित मुद्दे