如何缓存JavaScript日期对象



我正在使用date.js来支持我的Web应用程序中的许多文化。这里的问题是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();
     }

我在我的Web应用中指的是date.js和date-fr.js。

问题是,当我使用ToString函数var d = new Date().toString();时,它会由于递归调用而抛出Out of stack space msg。有什么方法可以缓存原始日期对象并将其放回原处,因为我不想删除doc

的js。

而不是包括 date.jsdate-fr-FR.js,您只需要包括 fr-FR.js文件即可更改文化,您在datejs-all-alpha1中的src/globalization文件夹中会找到文化。zip文件。fr.js文件仅包含特定文化数据,它应覆盖date.js中已包含的内容,而不必重新定义功能。

您要做的就是检查_toString是否已定义。

Date.prototype._toString = Date.prototype._toString || Date.prototype.toString;
Date.prototype.toString = function() {
    //doing something      
    return this._toString();
}

您只能复制一次函数:

Date.prototype._toString = Date.prototype.toString;

您第二次这样做,它将再次复制本机tostring函数,然后将通过递归循环呼唤自身。

我不知道您是否实际上是在执行此操作,请在fr-FR.js文件中进行BU,没有其他tostring方法定义的方法,所以我猜您正在手动添加它。

update

如果您包括date.js core两次(您不应该将其包含在内,只需包含erentes),则可能首先检查功能是否存在:

if ( typeof Date.prototype._toString != 'function' ) {
    // include date.js
}

最新更新