So überschreiben Sie eine JavaScript-Funktion


109

Ich versuche, eine parseFloatin JavaScript integrierte Funktion zu überschreiben .

Wie würde ich das machen?


9
Ich würde das nicht empfehlen. Vielleicht eine andere Funktion innerhalb des Prototyps erstellen?
— KJYe.Name 葉家仁

Sie könnten es einfach tun function parseFloat() {}, aber es gibt meines Wissens keine Möglichkeit, die native Version dann tatsächlich aufzurufen.
— Pimvdb

Das Überschreiben von Funktionen ist weit verbreitet.
— Jerry Liang

Antworten:


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

Ist es auch möglich, die native Version innerhalb einer benutzerdefinierten Version aufzurufen parseFloat? Ich habe es versucht, aber es ist der Fehler 'Maximale Größe des Aufrufstapels überschritten': jsfiddle.net/huZG2 . Vielen Dank.
— Pimvdb

1
Ihre Saite ist gebrochen :)
— Marcelo

2
@ David Waters: Ich fürchte, Ihr aktueller Code warnt für immer in Chrome.
— Pimvdb

11
@ David Beachten Sie, dass die Funktion hochgezogen ist, was bedeutet, dass sie origParseFloatauf die Funktion verweist, die Sie direkt danach deklarieren. Das würde funktionieren.
— HoLyVieR

1
@HoLyVieR danke Behoben durch Zuweisen einer Funktion zur Namensantwort aktualisiert aktualisiert jsfiddle.net/huZG2/6
— David Waters

45

Sie können jede integrierte Funktion überschreiben, indem Sie sie einfach erneut deklarieren.

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

Jetzt parseFloat(3)wird 3 alarmiert.


In dieser Antwort gibt es jedoch kein Konzept für das Überschreiben von Funktionen, dh das Überschreiben von Funktionen, aber das Beibehalten des Funktionsnamens.
— Ahsan

18

Man könnte es außer Kraft setzen oder vorzugsweise erweitern sie die Umsetzung wie folgt aus

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

Und nennen Sie es so, wie Sie es normalerweise nennen würden:

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

9

Sie können es so machen:

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

Schauen Sie sich hier ein funktionierendes Beispiel an: http://jsfiddle.net/LtjzW/1/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.