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.