覆盖Date.prototype.xyz函数

时间:2016-06-30 18:53:49

标签: javascript override prototype

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

我试过并且还四处寻找解决方案,但最后我想,我应该在这里问。

没有参数

  

> new Date()。toLocaleString()

     

“2016年6月30日,晚上11:33:19”

使用参数,"zh-Hans-CN"可以有任何有效值,只是为了提问。

  

> new Date()。toLocaleString(“zh-Hans-CN”)

     

“2016/6/30下午11:33:48”

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

  

> new Date()。toLocaleString()

     

“2016/6/30下午11:33:48”

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

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

但这是错误的,因为这个函数正在调用自身,导致无限的重复发生此错误。

  

未捕获RangeError:超出最大调用堆栈大小(...)

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

1 个答案:

答案 0 :(得分:1)

您可以使用匿名函数将Date.prototype.toLocaleString保存为引用,然后返回一个函数,该函数返回与该函数上下文绑定的reference

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

})(Date.prototype.toLocaleString)