2011-03-28 21 views
7

मैंने अपने कार्यों में कॉलबैक फ़ंक्शंस जोड़ने के लिए एक अजीब तरीका का उपयोग किया और मैं सोच रहा था कि क्या कार्यों में कॉलबैक जोड़ने का एक और सामान्य तरीका है, सबसे अच्छा मामला मुझे एक ऐसी स्थिति होगी जहां सभी मेरे फ़ंक्शंस फ़ंक्शन होने के लिए अंतिम दिए गए param को चेक करते हैं और यदि ऐसा है तो इसे कॉलबैक के रूप में उपयोग करें।फ़ंक्शन पर कॉलबैक जोड़ना - हमेशा

यह मैं इसे कैसे अतीत में किया था है:

var myFunc = function(obj) { 

    if (arguments.length > 0) { 
    if (_.util.typeofObj(arguments[arguments.length-1]) === Function) { 
     var callback = arguments[arguments.length-1]; 
    } 
    } 

    // some code ... 

    if (callback !== undefined) { 
    callback(); 
    } 

}; 

var foo = myFunc(myObj, function(){ 
    alert('Callback!'); 
}); 

कोई सुझाव?

उत्तर

5

यदि आप वास्तव में चाहते हैं, तो एक .cb प्रोटोटाइप के साथ Function.prototype का विस्तार कर सकते हैं। कुछ की तरह:

Function.prototype.cb = function(cb){ 
    var self = this; 
    return function(){ 
     self.callback = cb || function(){}; 
     self.apply(self, arguments); 
    } 
} 

फिर अपने कोड को सेक होगा:

var myFunc = function(obj){ 
    // some code 

    this.callback(); // callback will always be defined 
} 

और कॉल थोड़ा बदल जाएगा:

myFunc.cb(function(){ 
    // callback code 
})(myObj); 

बस एक विचार। आप सिंटैक्स को जो भी चाहें उतना अधिक कर सकते हैं।

+0

सही, यह विचार था, thx – ezmilhouse

+0

इस मामले में इससे कोई फर्क नहीं पड़ता, हालांकि, यह एक वैश्विक (अभी तक आरक्षित नहीं) चर के बाद से 'स्वयं' का उपयोग करने से बचना चाह सकता है। – Shaz

5

सुनिश्चित नहीं हैं कि आप एक कॉलबैक अधिक सीधे आगे लगता है कि डालने का एक तरीका यहाँ करने के लिए कोशिश कर रहे हैं, लेकिन:

var myFunc = function(obj, callback) { 
    ... 
} 

यह तरीका:

function(obj, callback) { 
    if(callback) { 
     callback(); 
    } 
} 
+0

या कुछ सिर scratching पैदा करने के लिए, के रूप में 'कालबैक && कॉलबैक() संक्षिप्त' – Jacob

+8

@Jackob: typeof कॉलबैक == "समारोह" && कॉलबैक() क्लीनर है – Andrey

+0

THX एंड्री, सबसे अच्छा समाधान लगता है कि अगर उपयोग करने के बाद पैरामीटर – ezmilhouse

13

मैं एक औपचारिक पैरामीटर पसंद करते हैं यह स्पष्ट करता है कि एक कॉलबैक है। आपको arguments ऑब्जेक्ट के साथ गड़बड़ करने की ज़रूरत नहीं है; आप यह देखने के लिए जांच सकते हैं कि callbackundefined है, और उसके बाद यह देखने के लिए जांचें कि यह उचित प्रकार (Function) है या नहीं।

+1

का उपयोग कर कुछ हफ्तों के लिए प्रोटोटाइप समाधान, मैंने आपकी सलाह पर स्विच किया है, इसे पढ़ने में आसान है, इसे एक बहुत ही महत्वपूर्ण eyecatcher – ezmilhouse

+0

@ezmilhouse हां, यह कम "जादू" हो रहा है क्योंकि औपचारिक पैरामीटर स्पष्ट है :) –

+0

@ ezmilhouse मैं स्वीकृत उत्तर बदलने का सुझाव देता हूं क्योंकि आपने उल्लेख किया है कि आपने अपना दृष्टिकोण बदल दिया है। –

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