JavaScript関数をオーバーライドする方法


109

JavaScriptの組み込みparseFloat関数をオーバーライドしようとしています。

どうすればいいですか?


9
そんなことはお勧めしません。おそらく、プロトタイプ内に別の関数を作成しますか?
KJYe.Name葉家仁

あなたは単に行うことができますがfunction parseFloat() {}、私が知る限り、実際にネイティブバージョンを呼び出す方法はありません。
pimvdb

関数のオーバーライドは非常に一般的な方法です。
Jerry Liang、

回答:


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

カスタム内でネイティブバージョンを呼び出すこともできparseFloatますか?私はこれを試しましたが、「最大コールスタックサイズを超えました」というエラーが発生しました:jsfiddle.net/huZG2。ありがとう。
pimvdb 2011年

1
文字列が壊れています:)
Marcelo

2
@David Waters:Chromeでは、現在のコードアラートが永遠に続くと思います。
pimvdb 2011年

11
@David関数は巻き上げられることを覚えておいてください。つまり、これはorigParseFloat直後に宣言する関数を指します。これはうまくいくでしょう。
HoLyVieR

1
@HoLyVieRの感謝名前の回答に関数を割り当てることで修正済み更新済みjsfiddle.net/huZG2/6を
David Waters

45

組み込み関数は、再宣言するだけでオーバーライドできます。

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

今すぐparseFloat(3)アラート3。


ただし、この回答には関数のオーバーライドという概念はありません。つまり、機能をオーバーライドしますが、関数名は同じにします。
Ahsan

18

あなたはそれを上書きするか、できればこのような実装を拡張することができます

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

通常のように呼び出します。

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

9

あなたはこのようにそれを行うことができます:

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

ここで実際の例を確認してください:http : //jsfiddle.net/LtjzW/1/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.