2015-01-07 5 views
5

पत्रक एपीआई से कोड पर एक नज़रलागू() बनाम कॉल() का उपयोग करना, इस मामले में किस का उपयोग करना है?

मेरा प्रश्न है क्यों wrapperFn.apply(context, args); और fn.apply(context, args); का उपयोग कर लागू() और नहीं फोन() ले रहा है।

आप कैसे जानते हैं कि किस का उपयोग करना है?

भ्रमित क्योंकि मुझे समय से पहले पता नहीं है कि मेरा गुजरने वाला कार्य सरणी का उपयोग कर रहा है या नहीं।

 
limitExecByInterval: function (fn, time, context) { 
     var lock, execOnUnlock; 

     return function wrapperFn() { 
      var args = arguments; 

      if (lock) { 
       execOnUnlock = true; 
       return; 
      } 

      lock = true; 

      setTimeout(function() { 
       lock = false; 

       if (execOnUnlock) { 
        wrapperFn.apply(context, args); 
        execOnUnlock = false; 
       } 
      }, time); 

      fn.apply(context, args); 
     }; 
    }, 

+2

http://stackoverflow.com/questions/1986896/what -इस-द-फर्क-बीच-कॉल-एंड-लागू – gaurav

+0

हाँ लागू सरणी लागू करता है, और कॉल उपयोग सूची (अल्पविराम से अलग चर)। अगर मैं अपने कार्य में तर्कों की एक सूची उत्तीर्ण कर रहा हूं तो क्या होगा। तो मुझे कॉल() का उपयोग करना चाहिए? – airnet

उत्तर

0

लागू तर्क की एक सारिणी, विधि श्रृंखलन, सुपर बुलाने की जावास्क्रिप्ट बराबर के लिए उपयोगी लेता है। जावा आदि में

function makeNoise() { 
    Foo.prototype.makeNoise.apply(this, arguments); 
} 

कॉल पैरामीटर की सूची लेता है, अधिक उपयोगी अन्य स्थितियों जहां तर्क केवल एक चर के रूप में उपलब्ध हैं।

fn.call(this, x, y, z); 

जो सिर्फ

fn.apply(this, [x, y, z]) 

को देखते हुए के लिए आशुलिपि की जाएगी आप तर्क आप लागू() का उपयोग करने की जरूरत है की एक सरणी है

+0

लेकिन अगर मेरा गुजरने वाला कार्य सरणी का उपयोग कर रहा है या नहीं, तो मैं समय से आगे नहीं हूं? यही कारण है कि मैं उलझन में हूं – airnet

+0

तर्क एक अंतर्निहित जादू चर है जो वर्तमान फ़ंक्शन कॉल के तर्कों के साथ पॉप्युलेट किया गया है, आपके कोड में आप इसे पहले तर्क के रूप में सहेजते हैं। – Adam

+0

आह धन्यवाद ..... – airnet

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