JavaScript işlevi nasıl geçersiz kılınır


109

JavaScript'te yerleşik bir parseFloatişlevi geçersiz kılmaya çalışıyorum .

Bunu nasıl yapacağım?


9
bunu yapmanızı tavsiye etmem. belki prototip içinde başka bir işlev yaratır?
KJYe.Name 葉家仁

Sadece yapabilirsin function parseFloat() {}, ama o zaman yerel sürümü gerçekten çağırmanın hiçbir yolu bilmediğim kadarıyla.
pimvdb

Geçersiz kılma işlevi çok yaygın bir uygulamadır.
Jerry Liang

Yanıtlar:


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

Yerel sürümü bir özel içinde çağırmak da mümkün mü parseFloat? Bunu denedim ama 'Maksimum çağrı yığını boyutu aşıldı' hatası veriyor : jsfiddle.net/huZG2 . Teşekkürler.
pimvdb

1

2
@David Waters: Korkarım mevcut kod uyarılarınız sonsuza kadar Chrome'da olacak.
pimvdb

11
@David İşlevin kaldırıldığını ve bunun origParseFloathemen sonra bildirdiğiniz işlevi gösterdiği anlamına geldiğini unutmayın. Bu işe yarar.
HoLyVieR

1
@HoLyVieR teşekkürler Güncellenen ad yanıtına işlev atanarak düzeltildi bkz. Jsfiddle.net/huZG2/6
David Waters

45

Herhangi bir yerleşik işlevi yalnızca yeniden bildirerek geçersiz kılabilirsiniz.

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

Şimdi parseFloat(3)uyarı verecek 3.


Ancak bu cevapta, işlevselliği geçersiz kılan ancak işlev adını aynı tutan işlev kavramı yoktur.
Ahsan

18

Bunu geçersiz kılabilir veya tercihen uygulamasını şu şekilde genişletebilirsiniz

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

Ve normalde adlandırdığınız gibi adlandırın:

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

9

Bunu şu şekilde yapabilirsiniz:

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

Burada çalışan bir örneğe göz atın: http://jsfiddle.net/LtjzW/1/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.