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.