Comment remplacer une fonction JavaScript


109

J'essaye de remplacer une parseFloatfonction intégrée dans JavaScript .

Comment pourrais-je faire ça?


9
je ne recommanderais pas de faire ça. peut-être créer une autre fonction dans le prototype?
KJYe.Name 葉家葉

Vous pouvez simplement le faire function parseFloat() {}, mais pour autant que je sache, il n'y a aucun moyen d'appeler la version native à ce moment-là.
pimvdb

La fonction prioritaire est une pratique très courante.
Jerry Liang

Réponses:


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

Est-il également possible d'appeler la version native à l'intérieur d'un custom parseFloat? J'ai essayé ceci mais il erreurs «Taille maximale de la pile d'appels dépassée»: jsfiddle.net/huZG2 . Merci.
pimvdb

1
Votre chaîne est cassée :)
Marcelo

2
@David Waters: J'ai bien peur que votre code actuel vous alerte pour toujours dans Chrome.
pimvdb

11
@David Gardez à l'esprit que les fonctions sont hissées, ce qui signifie qu'elles origParseFloatpointent vers la fonction que vous déclarez juste après. Cela fonctionnerait.
HoLyVieR

1
@HoLyVieR merci Corrigé en attribuant une fonction au nom réponse mise à jour voir jsfiddle.net/huZG2/6
David Waters

45

Vous pouvez remplacer n'importe quelle fonction intégrée en la re-déclarant simplement.

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

Maintenant parseFloat(3)va alerter 3.


Mais il n'y a pas de concept de fonction prioritaire dans cette réponse, c'est-à-dire de fonctionnalité prioritaire mais en gardant le même nom de fonction.
Ahsan

18

Vous pouvez le remplacer ou de préférence étendre son implémentation comme ceci

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

Et appelez-le comme vous l'appelez normalement:

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

9

Vous pouvez le faire comme ceci:

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

Découvrez un exemple de travail ici: http://jsfiddle.net/LtjzW/1/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.