Cara mengganti fungsi JavaScript


109

Saya mencoba untuk mengganti parseFloatfungsi bawaan di JavaScript .

Bagaimana saya akan melakukan itu?


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

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.


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

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/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.