2012-07-08 15 views
8

मुझे Parse.Object लाइब्रेरी के save फ़ंक्शन में एक बग ठीक करने की आवश्यकता है। हालांकि, जब मैं अपने ओवरराइट प्रोटोटाइप में मूल save फ़ंक्शन को कॉल करने का प्रयास करता हूं, तो यह स्टैक ओवरफ़्लो तक रिकर्सिव रूप से लूप करता है!इसे ओवरराइट किए बिना प्रोटोटाइप फ़ंक्शन का विस्तार

Parse.Object.prototype.save = function (arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 

    Parse.Object.prototype.save.call(this, arg1, arg2, arg3); // endless loop 
}; 

मैं पार्स द्वारा बनाए गए मूल फ़ंक्शन को कॉल करने के लिए अंतहीन पाश लाइन कैसे बदल सकता हूं?

धन्यवाद!

+0

मैं इस सवाल पसंद है लेकिन अभी भी एक जवाब है कि मेरे लिए काम करता नहीं मिल सकता है , @xdazz से जवाब के साथ भी। – Ryan

उत्तर

18

इस प्रयास करें:

(function(save) { 
    Parse.Object.prototype.save = function (arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 
    save.call(this, arg1, arg2, arg3); 
    }; 
}(Parse.Object.prototype.save)); 
+3

क्या आप कृपया बता सकते हैं कि यहां क्या हो रहा है? या कुछ लिंक जो करता है। धन्यवाद – Adi

+3

@Adnan आपको पुरानी बचत विधि को एक चर में सहेजने की आवश्यकता है, इस तरह, फ़ंक्शन पैरामीटर 'सेव' का उपयोग करें। – xdazz

+0

धन्यवाद @xdazz – Adi

4
Parse.Object.prototype.save = function (save) { 
    return function() { 
     fixIncludedParseObjects(this); 
     //Remember to return and .apply arguments when proxying 
     return save.apply(this, arguments); 
    }; 
}(Parse.Object.prototype.save); 
+1

काम करता है, लेकिन JSHint त्रुटि देता है" एक तत्काल कार्य लपेटें कोष्ठक में व्यवसाय "https://jslinterrors.com/wrap-an-immediate- कार्यक्षमता-invocation-in-parentheses –

0

स्वीकार किए जाते हैं जवाब देने के लिए इसी तरह की लेकिन शायद थोड़ा आसान समझने के लिए

var originalSaveFn = Parse.Object.prototype.save; 
Parse.Object.prototype.save = function(arg1, arg2, arg3) { 
    fixIncludedParseObjects(this); 
    originalSaveFn.call(this, arg1, arg2, arg3); 
}; 
संबंधित मुद्दे