为什么Angular提供这些看似冗余的辅助函数?

时间:2015-02-02 14:33:15

标签: javascript angularjs

Angular提供了几个辅助函数:

  • 小写
  • 大写
  • isFunction
  • 的forEach
  • 更多

每个都有本机实现。例如,String.prototype.toLowerCase()自ECMAScript First Edition以来就已存在。为什么Angular提供这种看似冗余的功能?

2 个答案:

答案 0 :(得分:4)

如果你深入研究Angular的代码库,你会发现angular.js中定义的效用函数经常使用。虽然角度公用事业函数集中的某些函数定义似乎相当多余,但以这种方式定义它们有一些好处:

  1. 与原生功能相比,某些效用功能确实具有微妙的行为差异。例如,只需查看Angular的angular.forEach
  2. 的文档
      
        
    • 与ES262的Array.prototype.forEach不同,   
          
      • 提供未定义的'或者' null' obj的值不会抛出TypeError,而只是返回提供的值。    var values = {name: 'misko', gender: 'male'}; var log = []; angular.forEach(values, function(value, key) { this.push(key + ': ' + value); }, log); expect(log).toEqual(['name: misko', 'gender: male']);   *
      •   
    •   
    1. 类型验证调用(例如angular.isDate)可以替换为其定义表达式toString.call(value) === '[object Date]',而不会有太大的麻烦,但只需angular.isDate这样的单个函数调用就会更流畅与代码库的其他部分的接口。

      即。表达

      if (angular.isDate(value)) { /* do work */ }

      比其对应

      更容易阅读和理解

      if (toString.call(value) === '[object Date]') { /* do work */ }

    2. 集中实现其实用程序功能还允许Angular to easily test这些函数,以确保它们在不同的浏览器实现中按预期运行。然后,Angular代码库的其他部分可以调用这组测试的实用程序函数,从理论上讲,每个调用应该以可预测的方式运行。

    3. 我确信还有很多其他原因我没有想到,但您可以随时深入了解代码库以获得更好,更完整的答案:)

答案 1 :(得分:-1)

其中一些在JavaScript 1.5中是不存在的,其他是本机函数的包装。

例如,lowercaseString.prototype.toLowerCase()的包装,可以在非字符串对象上调用异常。