【问题标题】:Angular.js – Where to extend JavaScript Date?Angular.js – 在哪里扩展 JavaScript 日期?
【发布时间】:2014-03-08 12:12:58
【问题描述】:

我想用更多功能扩展 JavaScript 的基本 Date 对象,如下所示:

Date.prototype.getWeek = function() {
    var date = new Date(this.getTime());
    date.setHours(0, 0, 0, 0);
    // Thursday in current week decides the year.
    date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
    // January 4 is always in week 1.
    var week1 = new Date(date.getFullYear(), 0, 4);
    // Adjust to Thursday in week 1 and count number of weeks from date to week1.
    return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);
};

目前,我将此逻辑放入名为objectExtenders.js 的文件中,该文件在index.html 中链接,如下所示:

<script src="scripts/misc/dateExtenders.js"></script>

将这个逻辑放到一个服务中似乎并不合适,因为它修改了全局 Date 对象。因此,我想将这样的服务注入特定的控制器是没有意义的,因为它无论如何都会适用于所有控制器。

有没有更好的方法来做到这一点?

【问题讨论】:

    标签: javascript angularjs date


    【解决方案1】:

    您可以改为创建一个名为 DateUtils 的服务,或者将其注入到您的控制器中,并且该服务可以具有在日期上工作的功能。

    因此,您将调用DateUtils.getWeek(myDate),而不是myDate.getWeek()

    【讨论】:

    • 我也是这么想的。我看到的唯一缺点是像date.getWeek() 这样的代码更具语义性。还是不修改全局 Date 对象并使用可注入服务的方法通常更好?
    • 全局范围内最好不要修改。
    • javascriptweblog.wordpress.com/2011/12/05/… 我认为考虑到扩展原生对象的考虑,使用上面建议的服务更安全。
    • @amann 至少很多开发者不喜欢扩展标准对象。
    【解决方案2】:

    你说得对,这种修改是全局的。它会影响所有Date 对象,无论它们是否在角度范围内。所以这个问题与角度或任何其他框架没有任何关系。只需将代码放在 JavaScript 文件中,然后将该文件包含在您要添加此功能的位置即可。

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 2017-10-26
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2019-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多