在修改参数时如何覆盖函数?

时间:2019-05-03 13:24:56

标签: javascript

我想重写parseInt以首先删除逗号

在Chrome的tampermonkey中运行

即,而不是parseInt(s)

会的

s.replace(/,/g, '');
parseInt(s)

我当前的代码是

(function() {
    // log all calls to setArray
    var proxied = parseInt;
    parseInt = function() {
        arguments[0]=arguments[0].replace(/,/g, '');
        return proxied.apply( this, arguments );
    };
})();

我收到错误消息“参数[0]。替换不是函数”

2 个答案:

答案 0 :(得分:0)

您应该确保您的参数是String:

(function() {
    // log all calls to setArray
    var proxied = parseInt;
    parseInt = function() {
        arguments[0]=arguments[0].toString().replace(/,/g, '');
        return proxied.apply( this, arguments );
    };
})();

编辑: 由于parseInt的第一个参数的定义,这种解决方案比强制转换更好。

  

要解析的值。如果字符串参数不是字符串,则为   转换为字符串(使用ToString抽象操作)。领导   字符串参数中的空格将被忽略。

EDIT2: 正如评论中所说:这不是一个好习惯。但是,如果仍然要执行此操作,则还应该允许第二个参数(基本)

答案 1 :(得分:0)

这是因为您传递了一个数字。 一种可能的解决方案是将参数[0]强制转换为字符串,然后像在其上调用replace方法一样

(function() {
    // log all calls to setArray
    var proxied = parseInt;
    parseInt = function() {
        arguments[0]=String(arguments[0]).replace(/,/g, '');
        return proxied.apply( this, arguments );
    };
})();