我正在使用Date.js来支持我的网络应用中的多种文化。这里的问题是date.js有这样的代码。
Date.prototype._toString = Date.prototype.toString;
Date.prototype.toString = function () {
//doing something
return this._toString();
}
当我使用另一个文化文件时,它也包含此定义。所以逻辑上我的文档有这个
//date.js
Date.prototype._toString = Date.prototype.toString;
Date.prototype.toString = function () {
//doing something
return this._toString();
}
//date-fr-FR.js
Date.prototype._toString = Date.prototype.toString;
Date.prototype.toString = function () {
//doing something
return this._toString();
}
我在网络应用中引用了date.js和date-fr-FR.js。
问题是当我使用toString函数var d = new Date().toString();
时,由于递归调用,它会抛出Out of stack space
个msg。有没有办法缓存
原始Date对象并将其休息,因为我不想从doc
答案 0 :(得分:2)
您只需要包含date.js
文件来更改文化,而不是同时包含date-fr-FR.js
和fr-FR.js
,您可以在Datejs中的src / globalization文件夹中找到该文件。 all-Alpha1.zip文件。 fr-FR.js文件只包含特定于文化的数据,它应该覆盖date.js中已包含的内容,而不重新定义功能。
答案 1 :(得分:1)
您所要做的就是检查是否已定义_toString
。
Date.prototype._toString = Date.prototype._toString || Date.prototype.toString;
Date.prototype.toString = function() {
//doing something
return this._toString();
}
答案 2 :(得分:0)
您应该只复制一次该功能:
Date.prototype._toString = Date.prototype.toString;
第二次执行此操作时,它将再次复制本机toString函数,然后通过递归循环调用自身。
我不知道你是不是真的这样做了多次,在fr-FR.js
文件中没有定义其他toString方法所以我猜你是手动添加它。
<强>更新强>
如果你将date.js核心包括两次(你不应该包括语言环境),你可以先检查一下这个函数是否存在:
if ( typeof Date.prototype._toString != 'function' ) {
// include date.js
}