Cách ghi đè một hàm JavaScript


109

Tôi đang cố gắng ghi đè một parseFloathàm tích hợp sẵn trong JavaScript .

Làm thế nào tôi sẽ làm điều đó?


9
tôi không khuyên bạn nên làm điều đó. có lẽ tạo một chức năng khác trong nguyên mẫu?
KJYe.Name 葉家仁

Bạn chỉ có thể làm function parseFloat() {}, nhưng tôi không biết có cách nào để thực sự gọi phiên bản gốc.
pimvdb

Chức năng ghi đè là thực tế rất phổ biến.
Jerry Liang

Câu trả lời:


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

Cũng có thể gọi phiên bản gốc bên trong một tùy chỉnh parseFloat? Tôi đã thử điều này nhưng lỗi 'Đã vượt quá kích thước ngăn xếp cuộc gọi tối đa': jsfiddle.net/huZG2 . Cảm ơn.
pimvdb

1
Chuỗi của bạn bị hỏng :)
Marcelo

2
@David Waters: Tôi e rằng mã hiện tại của bạn sẽ thông báo mãi mãi trong Chrome.
pimvdb

11
@David Hãy nhớ rằng hàm được nâng lên, có nghĩa là nó origParseFloattrỏ đến hàm mà bạn khai báo ngay sau đó. Điều này sẽ hoạt động.
HoLyVieR

1
@HoLyVieR cảm ơn Đã sửa lỗi bằng cách gán chức năng cho câu trả lời tên được cập nhật xem jsfiddle.net/huZG2/6
David Waters

45

Bạn có thể ghi đè bất kỳ hàm tích hợp nào bằng cách khai báo lại nó.

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

Bây giờ parseFloat(3)sẽ cảnh báo 3.


Nhưng không có khái niệm ghi đè hàm trong câu trả lời này, tức là ghi đè chức năng nhưng giữ nguyên tên hàm.
Ahsan

18

Bạn có thể ghi đè nó hoặc tốt hơn là mở rộng triển khai nó như thế này

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

Và gọi nó như bạn thường gọi:

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

9

Bạn có thể làm như thế này:

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

Xem ví dụ hoạt động tại đây: http://jsfiddle.net/LtjzW/1/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.