使用其他方法扩展Angular是不是很糟糕?

时间:2014-01-09 21:47:58

标签: javascript jquery angularjs

我正在开发一个应用程序,并且Angular提供了一些我认为有用的方法。我启动了一个文件,用所需的方法扩展Angular,而不是创建一个实用程序服务并注入它(这对简单的jQuery-esque方法来说似乎很麻烦)。

所以,我坚持不懈地询问这是不是一个好主意?是否有理由避免这种做法?

e.g。 angular.extensions.js

// Angular has been previously loaded

;(function() {

  angular.extend(angular, {

    isEmptyObject: function(obj) {
      var name;
      for ( name in obj ) {
        return false;
      }
      return true;
    }

    // etc. for simple helpers

  })

})();

2 个答案:

答案 0 :(得分:5)

我想这在技术上是可以的,但可能有点禁忌风格。考虑一位新开发人员加入您的团队,并在您的代码库中看到angular.generatePuppy()。他谷歌搜索angular.generatePuppy()并且在Angular API中找不到任何文档或对它的引用,随之而来的是挫败感,尽管谷歌的小狗结果略有减少。如果您已经创建了一个实用程序服务,那么将它注入任何您可能需要的地方都很容易。一旦你完成设置,它就没有额外的工作了,而且在我看来,这将使代码更具可读性,因为你写的内容和Angular提供的内容之间有明确的界限。

答案 1 :(得分:2)

只要您不覆盖现有属性,它在技术上很可能很好。但从组织上看,这似乎是一个坏主意?

为什么不将自己的全局对象命名为utils或更改?

window.utils = {
  isEmptyObject: function(obj) { ... }
};

一般情况下,除非绝对必要,否则不要乱用供应商库。即使它现在很好,也许未来的版本可能会使用该属性或以不同的方式工作。

从可维护性的角度来看,未来的程序员可能会认为angular.isPlainObject是角度框架的一部分。并且不会想到在调试某些东西时检查该代码是否真的有效。他们可能不知道您的项目是否实现了它自己的版本,因为它在供应商库中是命名空间。


简而言之,你可能会,而且它可能会很好。但你真的不应该。