Cara mengganti fungsi JavaScript

109

Saya mencoba untuk mengganti parseFloatfungsi bawaan di JavaScript .

Bagaimana saya akan melakukan itu?

Riz
sumber
9
saya tidak akan merekomendasikan melakukan itu. mungkin membuat fungsi lain dalam prototipe?
KJYe.Name 葉家仁
Anda bisa melakukannya function parseFloat() {}, tetapi sejauh yang saya tahu tidak ada cara untuk benar-benar memanggil versi asli.
pimvdb
Fungsi utama adalah praktik yang sangat umum.
Jerry Liang

Jawaban:

231
var origParseFloat = parseFloat;
parseFloat = function(str) {
     alert("And I'm in your floats!");
     return origParseFloat(str);
}
David Waters
sumber
Apakah mungkin juga untuk memanggil versi asli di dalam custom parseFloat? Saya mencoba ini tetapi kesalahan 'Ukuran tumpukan panggilan maksimum terlampaui': jsfiddle.net/huZG2 . Terima kasih.
pimvdb
1
String Anda rusak :)
Marcelo
2
@David Waters: Saya khawatir kode Anda saat ini mengingatkan selamanya di Chrome.
pimvdb
11
@David Ingatlah bahwa fungsi tersebut diangkat, yang berarti bahwa origParseFloatfungsi tersebut menunjuk ke fungsi yang Anda deklarasikan tepat setelahnya. Ini akan berhasil.
HoLyVieR
1
@HoLyVieR terima kasih Diperbaiki dengan menetapkan fungsi ke jawaban nama diperbarui lihat jsfiddle.net/huZG2/6
David Waters
45

Anda dapat mengganti fungsi built-in hanya dengan mendeklarasikannya kembali.

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

Sekarang parseFloat(3)akan mengingatkan 3.

Roket Hazmat
sumber
Tetapi tidak ada konsep penggantian fungsi dalam jawaban ini, yaitu mengganti fungsionalitas tetapi mempertahankan nama fungsi yang sama.
Ahsan
18

Anda dapat menimpanya atau lebih baik memperpanjang implementasinya seperti ini

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

Dan sebut saja seperti biasa Anda menyebutnya:

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

Anda bisa melakukannya seperti ini:

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

Lihat contoh yang berfungsi di sini: http://jsfiddle.net/LtjzW/1/

Kyle Wild
sumber