जावास्क्रिप्ट फ़ंक्शन को ओवरराइड कैसे करें


109

मैं जावास्क्रिप्टparseFloat में निर्मित फ़ंक्शन को ओवरराइड करने की कोशिश कर रहा हूं ।

मुझसे यह कैसे होगा?


9
मैं ऐसा करने की सलाह नहीं दूंगा। शायद प्रोटोटाइप के भीतर एक और फ़ंक्शन बनाएं?
KJYe.Name

आप बस कर सकते हैं function parseFloat() {}, लेकिन जहां तक ​​मुझे पता है कि वास्तव में मूल संस्करण को कॉल करने का कोई तरीका नहीं है।
pimvdb

ओवरराइडिंग फंक्शन बहुत आम बात है।
जेरी लियांग

जवाबों:


231
var origParseFloat = parseFloat;
parseFloat = function(str) {
     alert("And I'm in your floats!");
     return origParseFloat(str);
}

क्या कस्टम के अंदर मूल संस्करण को कॉल करना भी संभव है parseFloat? मैंने यह कोशिश की लेकिन यह 'अधिकतम कॉल स्टैक आकार को पार कर गया' त्रुटियां: jsfiddle.net/huZG2 । धन्यवाद।
पिमवेदब

1
आपका तार टूट गया है :)
Marcelo

2
@ डेविड वाटर्स: मैं Chrome में आपके वर्तमान कोड अलर्ट से हमेशा डरता हूँ।
pimvdb

11
@ डेविड ध्यान रखें कि फ़ंक्शन फहराए गए हैं, जिसका अर्थ है कि origParseFloatउस फ़ंक्शन को इंगित करता है जिसे आप सही घोषित करते हैं। यह काम करेगा।
HoLyVieR

1
@HoLyVieR धन्यवाद उत्तर देने के लिए फंक्शन असाइन करने के लिए फिक्स्ड अपडेट देखें jsfield.net/huZG2/6
डेविड वाटर्स

45

आप इसे फिर से घोषित करके किसी भी अंतर्निहित फ़ंक्शन को ओवरराइड कर सकते हैं।

parseFloat = function(a){
  alert(a)
};

अब parseFloat(3)3 को अलर्ट करेंगे।


लेकिन इस जवाब में फ़ंक्शन ओवरराइडिंग की कोई अवधारणा नहीं है, अर्थात कार्यक्षमता को ओवरराइड करना लेकिन फ़ंक्शन का नाम समान रखना।
अहसन

18

आप इसे ओवरराइड या अधिमानतः सकता का विस्तार इस तरह यह के कार्यान्वयन

parseFloat = (function(_super) {
    return function() {
        // Extend it to log the value for example that is passed
        console.log(arguments[0]);
        // Or override it by always subtracting 1 for example
        arguments[0] = arguments[0] - 1;
        return _super.apply(this, arguments);
    };         

})(parseFloat);

और इसे वैसे ही कहें जैसे कि आप इसे सामान्य रूप से कहेंगे:

var result = parseFloat(1.345); // It should log the value 1.345 but get the value 0.345

9

आप इसे इस तरह से कर सकते हैं:

alert(parseFloat("1.1531531414")); // alerts the float
parseFloat = function(input) { return 1; };
alert(parseFloat("1.1531531414")); // alerts '1'

यहां एक कामकाजी उदाहरण देखें: http://jsfiddle.net/LtjzW/1/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.