如何覆盖(或覆盖?)内置的Javascript函数

时间:2019-02-04 10:12:56

标签: javascript unit-testing

出于单元测试的目的,我需要覆盖Number.prototype.toLocaleString(),以便始终使用en-US而不是默认行为来调用它。我知道可以覆盖接收参数的普通内置函数,但是toLocaleString()并没有将Number直接转换为字符串作为参数,因此我对此感到困惑。

我尝试了以下操作:

Number.prototype.toLocaleStringTest = Number.prototype.toLocaleString
Number.prototype.toLocaleString = function() { this.toLocaleStringTest('en-US') }

但是这个新的toLocaleString()函数的结果始终是undefined。顺便说一句,我确实通过在实现中添加临时console.log("I am called!")来确保调用了新功能。

我在做什么错-还是我在试图实现一些不可行的事情?

1 个答案:

答案 0 :(得分:7)

您非常亲密...仅缺少return ...:-)

Number.prototype.toLocaleStringTest = Number.prototype.toLocaleString
Number.prototype.toLocaleString = function() {
  return this.toLocaleStringTest('en-US')
}
n = 123456.789;
console.log(n.toLocaleString());