2017-10-13 26 views
0

J'ajouté ce code:Est-ce que l'extension de l'objet Date natif dans Javascript provoque des effets inattendus?

Date.prototype.formatMMDDYYYY = function() { 
    return (this.getMonth() + 1) + 
    "/" + this.getDate() + 
    "/" + this.getFullYear(); 
} 

outil d'inspection de code de ReSharper me dit que Extending prototype of native object 'Date' may cause unexpected effects.

Quels sont les effets inattendus qui peuvent se produire?

P.S. Ce question a une discussion pourquoi c'est une mauvaise idée d'étendre les objets en général, mais toutes les réponses sont très vagues. Je cherche un effet secondaire spécifique de moi prolongeant l'objet de date de la manière que j'ai faite.

+1

@Ivar J'ai clarifié la question. Fondamentalement, je suis à la recherche de détails que la question que vous avez liée ne fournit pas. – AngryHacker

Répondre

2

Cette fonction devrait fonctionner correctement. Si vous manipuliez des propriétés ou remplaçiez une fonction qui existait déjà, vous pourriez avoir des problèmes.

Par exemple au lieu de this.getmonth() + 1 vous avez fait this.month++ ou quel que soit l'interne s'appelle vous venez de changer la date et chaque fois que la fonction est appelée, vous changez la date. Évidemment, remplacer une fonction changerait cette fonction à chaque endroit où votre fonction serait incluse. Si pour certains si vous êtes sur une page Web et que vous chargez 5 fichiers de script ils utiliseraient tous la fonction surchargée. Et cela aurait probablement des résultats inattendus. Surtout si les scripts ne sont pas liés.

Tout cela étant dit, il est sans doute préférable de construire que comme emballage FormatDate (date) { return (date.getDate, ...)} Comme cela empêcherait les collisions nommant futures et ainsi de suite. Imaginez que vous essayez de résoudre ce problème dans cinq ans, par exemple. Vous pouvez également créer une sous-classe de date qui fait ces choses et l'utiliser si vous le souhaitez.