J’utilise Date.js pour prendre en charge de nombreuses cultures dans mon application Web. Le problème ici est que date.js a un code comme celui-ci.
Date.prototype._toSsortingng = Date.prototype.toSsortingng; Date.prototype.toSsortingng = function () { //doing something return this._toSsortingng(); }
lorsque j’utilise un autre fichier de culture, il contient également cette définition. si logiquement ma doc a cette
//date.js Date.prototype._toSsortingng = Date.prototype.toSsortingng; Date.prototype.toSsortingng = function () { //doing something return this._toSsortingng(); } //date-fr-FR.js Date.prototype._toSsortingng = Date.prototype.toSsortingng; Date.prototype.toSsortingng = function () { //doing something return this._toSsortingng(); }
Je fais référence à la fois à date.js et à date-fr-FR.js dans mon application Web.
Le problème est lorsque j’utilise la fonction toSsortingng var d = new Date().toSsortingng();
il jette un msg d’ Out of stack space
, à cause des appels récursifs. Existe-t-il un moyen de mettre en cache l’object Date d’origine et de le reposer, car je ne souhaite pas supprimer date.js de la documentation
Au lieu d’inclure les date.js
et date-fr-FR.js
, il vous suffit d’inclure le fichier fr-FR.js
pour modifier la culture, que vous trouverez dans le dossier src / globalisation du fichier Datejs-all-Alpha1. .fichier zip. Le fichier fr-FR.js contient uniquement les données spécifiques à la culture. Il doit remplacer ce qui est déjà inclus dans date.js, sans redéfinir les fonctionnalités.
Tout ce que vous avez à faire est de vérifier si _toSsortingng
a été défini ou non.
Date.prototype._toSsortingng = Date.prototype._toSsortingng || Date.prototype.toSsortingng; Date.prototype.toSsortingng = function() { //doing something return this._toSsortingng(); }
Vous ne devez copier la fonction qu’une seule fois:
Date.prototype._toSsortingng = Date.prototype.toSsortingng;
La deuxième fois, vous copiez à nouveau la fonction native toSsortingng, qui s’appellera ensuite via une boucle récursive.
Je ne sais pas si vous le faites réellement plus d’une fois, mais dans le fichier fr-FR.js
, il n’y a pas d’autre méthode toSsortingng définie, donc je suppose que vous l’ajoutez manuellement.
Mettre à jour
Si vous incluez le kernel date.js deux fois (vous ne devriez pas inclure uniquement les parameters régionaux), vous pouvez probablement vérifier si la fonction est présente en premier:
if ( typeof Date.prototype._toSsortingng != 'function' ) { // include date.js }