Angular 提供了几个辅助函数:
- 小写
- 大写
- 是函数
- 对于每个
- 还有更多
其中每一个都有 native 实现。例如,String.prototype.toLowerCase() 自 ECMAScript 第一版以来就已存在。为什么 Angular 提供这种看似多余的功能?
最佳答案
如果您深入研究 Angular 的代码库,您会注意到 angular.js 中定义的实用函数使用频率相当高。虽然 Angular 实用函数集中的某些函数定义看起来确实相当多余,但以这种方式定义它们有一些好处:
- 与 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/