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

标签 javascript angularjs

Angular 提供了几个辅助函数:

  • 小写
  • 大写
  • 是函数
  • 对于每个
  • 还有更多

其中每一个都有 native 实现。例如,String.prototype.toLowerCase() 自 ECMAScript 第一版以来就已存在。为什么 Angular 提供这种看似多余的功能?

最佳答案

如果您深入研究 Angular 的代码库,您会注意到 angular.js 中定义的实用函数使用频率相当高。虽然 Angular 实用函数集中的某些函数定义看起来确实相当多余,但以这种方式定义它们有一些好处:

  1. 与 native 对应函数相比,某些实用函数确实存在细微的行为差异。例如,只需查看 Angular 的 angular.forEach 文档:
  • Unlike ES262's Array.prototype.forEach,
    • Providing 'undefined' or 'null' values for obj will not throw a TypeError, but rather just return the value provided. 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']); *
  • 类型验证调用(例如 angular.isDate)可以替换为其定义表达式 toString.call(value) === '[object Date]' 没有太多麻烦,但是像 angular.isDate 这样的单个函数调用为代码库的其他部分提供了更流畅的接口(interface)。

    即表达式

    if (angular.isDate(value)) {/* 执行工作 */}

    比其对应版本更容易阅读和理解

    if (toString.call(value) === '[object Date]') {/* 执行工作 */}

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

  • 我确信还有很多其他我没有想到的原因,但您始终可以自己深入研究代码库以获得更好、更完整的答案:)

    关于javascript - 为什么 Angular 提供这些看似多余的辅助函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28280037/

    相关文章:

    javascript - 确定您的网页已激活(包括切换浏览器选项卡)的最佳方法是什么?

    javascript - 这个算法的时间和空间复杂度是O(n)还是O(1)?

    javascript - Geofirestore 文档

    javascript - Ng-if - 尝试获取我的 Firebase 的数据

    javascript - 如何在 Protractor 中定位动态输入字段并传递值

    javascript - 不是 Angular js中的数字

    php - 搜索过滤器,我应该在客户端还是服务器端进行?

    javascript - 如何在幻灯片部分的页面中隐藏底部零

    angularjs - Angular ng 检查项目是否在列表中

    javascript - 删除 JavaScript 中的重复代码;更新传递给函数的对象