Cómo anular una función de JavaScript


109

Estoy tratando de anular una parseFloatfunción incorporada en JavaScript .

¿Cómo haría yo para hacer eso?


9
No recomendaría hacer eso. ¿Quizás crear otra función dentro del prototipo?
KJYe.Name 葉家仁

Podrías hacerlo function parseFloat() {}, pero hasta donde yo sé, no hay forma de llamar a la versión nativa entonces.
pimvdb

La función de reemplazo es una práctica muy común.
Jerry Liang

Respuestas:


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

¿También es posible llamar a la versión nativa dentro de una personalizada parseFloat? Intenté esto pero los errores 'Se excedió el tamaño máximo de la pila de llamadas': jsfiddle.net/huZG2 . Gracias.
pimvdb

1
Tu cuerda está rota :)
Marcelo

2
@David Waters: Me temo que su código actual alerta para siempre en Chrome.
pimvdb

11
@David Tenga en cuenta que las funciones están elevadas, lo que significa que origParseFloatapunta a la función que declara justo después. Esto funcionaría.
HoLyVieR

1
@HoLyVieR gracias Se corrigió asignando una función al nombre de la respuesta actualizada ver jsfiddle.net/huZG2/6
David Waters

45

Puede anular cualquier función incorporada simplemente volviéndola a declarar.

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

Ahora parseFloat(3)alertará a 3.


Pero no hay un concepto de función que anule en esta respuesta, es decir, que anule la funcionalidad pero que mantenga el mismo nombre de la función.
Ahsan

18

Puede anularlo o, preferiblemente, extender su implementación de esta manera

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

Y llámelo como lo llamaría normalmente:

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

9

Puedes hacerlo así:

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

Vea un ejemplo de trabajo aquí: http://jsfiddle.net/LtjzW/1/

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.