JavaScript 함수를 재정의하는 방법


109

JavaScriptparseFloat 에서 내장 함수 를 재정의하려고합니다 .

어떻게할까요?


9
나는 그것을 권장하지 않을 것입니다. 프로토 타입 내에서 다른 기능을 만들 수 있습니까?
KJYe.Name 葉家仁 2011 년

할 수는 function parseFloat() {}있지만 실제로 네이티브 버전을 호출하는 방법은 없습니다.
pimvdb 2011 년

함수를 재정의하는 것은 매우 일반적인 관행입니다.
Jerry Liang

답변:


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

사용자 정의 내에서 기본 버전을 호출 할 수도 parseFloat있습니까? 나는 이것을 시도했지만 'Maximum call stack size exceeded': jsfiddle.net/huZG2 오류가 발생합니다 . 감사.
pimvdb 2011 년

1
문자열이 끊어졌습니다. :)
Marcelo

2
@David Waters : 현재 코드가 Chrome에서 영원히 알림을받을 수 있습니다.
pimvdb 2011 년

11
@David 함수가 호이스트된다는 것을 명심하십시오. 즉, origParseFloat바로 선언 한 함수를 가리 킵니다. 이것은 작동합니다.
HoLyVieR 2011 년

1
@HoLyVieR thanks 이름에 기능을 할당하여 수정 됨 답변 업데이트 참조 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/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.