如何缓存JavaScript Date对象?

时间:2012-11-01 08:27:12

标签: javascript jquery datejs

我正在使用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

中删除date.js

3 个答案:

答案 0 :(得分:2)

您只需要包含date.js文件来更改文化,而不是同时包含date-fr-FR.jsfr-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
}