覆盖 Date.prototype.xyz 函数

Override Date.prototype.xyz function

请不要将其标记为重复。我搜索了很多,这里没有这样的问题。有相似但不相同的

我尝试过,也四处寻找解决方案,但最后我想,我应该在这里问一下。

无参数

>new Date().toLocaleString()

"6/30/2016, 11:33:19 PM"

带参数,"zh-Hans-CN"可以取任意有效值,仅供提问。

>new Date().toLocaleString("zh-Hans-CN")

"2016/6/30 下午11:33:48"

我实际上想改变这个函数的行为,它应该 return 像第二种情况一样输出,但没有任何输入参数。喜欢

>new Date().toLocaleString()

"2016/6/30 下午11:33:48"

所以我的想法是,以某种方式覆盖该函数并使用参数从覆盖函数内部调用现有函数。

喜欢

Date.prototype.toLocaleString = function () {
    return this.toLocalString("zh-Hans-CN");
}

但这是错误的,因为这个函数正在调用自身,导致无限递归套用这个错误。

Uncaught RangeError: Maximum call stack size exceeded(…)

这是一个例子,问题是我们如何使用相同的原型函数覆盖此功能。也许有一种方法可以先分离实际功能,然后再覆盖它。非常感谢您的帮助。

您可以使用匿名函数将 Date.prototype.toLocaleString 保存为参考,然后 return 一个 return 绑定到该函数上下文的 reference 函数。

Date.prototype.toLocaleString = (function (ref) {
  return function(){
    return ref.bind(this)('zh-Hans-CN');
  }

})(Date.prototype.toLocaleString)