3

Web アプリで多くのカルチャをサポートするために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();
     }

Web アプリで date.js と date-fr-FR.js の両方を参照しています。

問題は、toString 関数を使用すると、再帰呼び出しのためにメッセージvar d = new Date().toString();がスローされることです。Out of stack spaceドキュメントからdate.jsを削除したくないため、元のDateオブジェクトをキャッシュして元に戻す方法はありますか

4

3 に答える 3

2

との両方を含める代わりにdate.js、Datejs-all-Alpha1.zip ファイルの src/globalization フォルダーにあるカルチャを変更するファイルをdate-fr-FR.js含めるだけで済みます。fr-FR.jsfr-FR.js ファイルにはカルチャ固有のデータのみが含まれており、機能を再定義することなく、date.js に既に含まれているものをオーバーライドする必要があります。

于 2012-11-01T08:55:05.983 に答える
1

あなたがしなければならないのは_toString、定義されているかどうかをチェックすることです。

Date.prototype._toString = Date.prototype._toString || Date.prototype.toString;
Date.prototype.toString = function() {
    //doing something      
    return this._toString();
}
于 2012-11-01T09:23:16.607 に答える
0

関数は 1 回だけコピーする必要があります。

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

これを 2 回目に実行すると、ネイティブの toString 関数が再度コピーされ、再帰ループを介して自身が呼び出されます。

実際にこれを複数回行っているかどうかはわかりませんが、fr-FR.jsファイルには他に toString メソッドが定義されていないため、手動で追加していると思います。

アップデート

date.js コアを 2 回インクルードしている場合 (ロケールだけをインクルードするべきではありません)、最初に関数が存在するかどうかを確認できます。

if ( typeof Date.prototype._toString != 'function' ) {
    // include date.js
}
于 2012-11-01T08:35:39.253 に答える