निकाले बिना एक समारोह ओवरराइड करना अगर मैं इस तरह एक समारोह है:स्थिर गुणों
function a() {
console.log('a');
}
और फिर इस तरह एक स्थिर संपत्ति आवंटित:
a.static = 'foo';
लेकिन कहते हैं कि मैं के साथ समारोह ओवरराइड करना चाहते इस तरह एक और समारोह:
var old = a;
a = function() {
console.log('new');
old.call(this);
};
a.static // undefined
जब से मैं a
के लिए एक नया समारोह सौंपा, यह स्थैतिक गुण खो गए हैं। क्या स्थिर गुणों को लूपिंग के बिना रखने और मैन्युअल रूप से कॉपी करने का कोई साफ तरीका है?
अद्यतन:
यहाँ एक वास्तविक दुनिया परिदृश्य है:
$.fn.modal = function() {
// some code
};
$.fn.modal.defaults = { // some object };
तो अगर मैं "विस्तार" करना चाहते हैं: बूटस्ट्रैप jQuery प्लगइन्स में, लेखक इस तरह संपत्ति कार्य करने के लिए चूक प्रदान करती है प्रोटोटाइप मैं सामान्य रूप से करना होगा:
var old = $.fn.modal;
$.fn.modal = function() {
// do my thing
old.apply(this, arguments);
}
लेकिन उस
होगा$.fn.modal.defaults === undefined
यह कार्यक्षमता तोड़ देगा, क्योंकि डिफ़ॉल्ट खो गए हैं। मैं सोच रहा था कि क्या जावास्क्रिप्ट में को बदलने के लिए केवल स्नेही तरीका है, स्थिर गुणों को खोए बिना केवल फ़ंक्शन।
क्या मैं पूछ सकता हूं कि इस तरह के दृष्टिकोण का उपयोग क्या है? यह वास्तव में गंदा लग रहा है। – Christoph
मैं पूछ रहा हूं क्योंकि बूटस्ट्रैप jQuery प्लगइन्स में, लेखक प्रोटोटाइप से जुड़ी ऑब्जेक्ट के रूप में स्थैतिक डिफ़ॉल्ट निर्दिष्ट करता है। इसलिए यदि मैं इसे विस्तारित करना चाहता हूं, तो मैं संलग्न (और संभवतः अन्य गुण) को खो देता हूं जो संलग्न हैं। इसके अलावा, क्योंकि मैं उत्सुक हूं कि केवल फ़ंक्शन को बदलने का कोई तरीका है, न कि यह स्थिर गुण है। – David