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

sch*_*gel 4 javascript unit-testing

出于单元测试的目的,我需要覆盖Number.prototype.toLocaleString()它,以便始终使用en-US而不是默认行为来调用它.我理解覆盖一个接收参数的普通内置函数,但toLocaleString()不会将Number作为参数直接转换为字符串,所以我在这里很困惑.

我尝试了以下方法:

Number.prototype.toLocaleStringTest = Number.prototype.toLocaleString
Number.prototype.toLocaleString = function() { this.toLocaleStringTest('en-US') }
Run Code Online (Sandbox Code Playgroud)

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

我做错了什么 - 或者我是否想要实现一些不可行的东西?

Mar*_*coS 7

你非常接近......只有一个return人失踪...... :-)

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