วิธีการแทนที่ฟังก์ชัน JavaScript


109

ฉันพยายามที่จะแทนที่การสร้างขึ้นในparseFloatฟังก์ชั่นในJavaScript

ฉันจะทำอย่างนั้นได้อย่างไร?


9
ฉันไม่แนะนำให้ทำอย่างนั้น อาจสร้างฟังก์ชันอื่นภายในต้นแบบหรือไม่
KJYe.Name 葉家仁

คุณสามารถทำได้function parseFloat() {}แต่มีเท่าที่ฉันรู้ว่าไม่มีวิธีใดที่จะเรียกเวอร์ชันเนทีฟได้จริง
pimvdb

การลบล้างฟังก์ชันเป็นเรื่องปกติ
Jerry Liang

คำตอบ:


232
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

19

คุณสามารถลบล้างหรือขยายการใช้งานได้เช่นนี้

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.