出于单元测试目的,我需要覆盖 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!") 来确保这一点。

我做错了什么——或者我试图实现一些不可行的东西?

最佳答案

你非常接近......只缺少一个return...... :-)

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

关于javascript - 如何覆盖(或覆盖?)内置 Javascript 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54513935/

10-10 12:59