Як замінити функцію JavaScript


109

Я намагаюся замінити вбудовану parseFloatфункцію в JavaScript .

Як би я пішов робити це?


9
я б не рекомендував це робити. можливо, створити ще одну функцію в прототипі?
KJYe.Name 葉家仁

Ви могли б просто зробити function parseFloat() {}, але, наскільки я не знаю, немає способу зателефонувати на рідну версію.
pimvdb

Переважна функція є дуже поширеною практикою.
Джеррі Лян

Відповіді:


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

Чи можна також зателефонувати до власної версії всередині користувацького parseFloat? Я спробував це, але помилки "Максимальний розмір стека викликів перевищений": jsfiddle.net/huZG2 . Дякую.
pimvdb

1
Ваша струна зламана :)
Marcelo

2
@David Waters: Боюся, ваш поточний код сповіщає назавжди в Chrome.
pimvdb

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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.