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?

Riz
fuente
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);
}
David Waters
fuente
¿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.

Cohete Hazmat
fuente
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
Anastasios Selmanis
fuente
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/

Kyle salvaje
fuente