gpt4 book ai didi

javascript - 重写 Date.prototype.xyz 函数

转载 作者:行者123 更新时间:2023-12-03 06:37:21 26 4
gpt4 key购买 nike

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

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

不带参数

>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"

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

>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(…)

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

最佳答案

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

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

})(Date.prototype.toLocaleString)

关于javascript - 重写 Date.prototype.xyz 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38131154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com