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


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.