Come sostituire una funzione JavaScript


109

Sto cercando di sovrascrivere una parseFloatfunzione incorporata in JavaScript .

Come potrei farlo?


9
non consiglierei di farlo. forse creare un'altra funzione all'interno del prototipo?
KJYe.Name 葉家仁

Potresti semplicemente farlo function parseFloat() {}, ma per quanto ne so non c'è modo di chiamare effettivamente la versione nativa allora.
pimvdb

La funzione di override è una pratica molto comune.
Jerry Liang

Risposte:


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

È anche possibile chiamare la versione nativa all'interno di un custom parseFloat? Ho provato questo ma l'errore "Dimensione massima dello stack di chiamate superata": jsfiddle.net/huZG2 . Grazie.
pimvdb

1
La tua corda è rotta :)
Marcelo

2
@David Waters: Temo che il tuo codice attuale venga avvisato per sempre in Chrome.
pimvdb

11
@David Tieni presente che le funzioni sono sollevate, il che significa che origParseFloatpunta alla funzione che dichiari subito dopo. Questo funzionerebbe.
HoLyVieR

1
@HoLyVieR grazie Risolto assegnando la funzione al nome risposta aggiornata vedi jsfiddle.net/huZG2/6
David Waters

45

Puoi sovrascrivere qualsiasi funzione incorporata semplicemente ri-dichiarandola.

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

Ora parseFloat(3)avviserà 3.


Ma in questa risposta non esiste il concetto di sovrascrittura della funzione, ovvero sovrascrittura della funzionalità ma mantenendo lo stesso nome della funzione.
Ahsan

18

Puoi sovrascriverlo o preferibilmente estenderne l'implementazione in questo modo

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);

E chiamalo come lo chiameresti normalmente:

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

9

Puoi farlo in questo modo:

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

Guarda un esempio funzionante qui: http://jsfiddle.net/LtjzW/1/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.