javascript - 为什么 Javascript 库有对数组方法(push、slice 等)的本地引用?

标签 javascript angularjs backbone.js

我一直在阅读一些 javascript 库的代码。我注意到 AngularJS 和 Backbone.js 都保留对数组函数的本地引用。例如:

var push = [].push  // or array.push

当数组是语言的构造并且应该可以全局访问时,这样做有什么意义?

最佳答案

因为Array原型(prototype)的函数可以应用于非数组。

例如,将项目插入到类似数组的对象中:

var o  = { length: 0 };
[].push.call(o, 'hi');
o; //Object {0: "hi", length: 1}

另一种常见做法是将 arguments 对象切片放入 native 数组中:

(function() {
   return [].slice.call(arguments); //[1, 2]
}(1, 2));

正如您所看到的,保存对这些函数的引用可以减少查找开销,使代码更小并且适合缩小。

在我看来,这主要是为了方便和可读性,因为重复编写 [].arrayMethod 看起来相当笨拙。性能和缩小程度的提升是额外的。

<小时/>

查看 Angular 的源代码,我发现了以下情况:

  • push 用于 JQLite prototype 。请注意,jQuery 对象具有类似数组的结构,类似于本答案中的第一个示例;
  • slice 用于 sliceArgs 内部, concatbind功能。

Backbone 还使用 slice 参数对象(在 Events#triggerUnderscore methods proxying 处),它也在 Collection#slice 处使用 slice .

关于javascript - 为什么 Javascript 库有对数组方法(push、slice 等)的本地引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015535/

相关文章:

javascript - 如何在 JavaScript 中创建一个填充任意数量空数组的数组?

javascript - 如何在 js.pdf 中添加页码

javascript - 来源http ://localhost is not allowed by Access-Control-Allow-Origin

node.js - Nodejs/rails/主干架构

javascript - 跨用户同步主干模型状态的最简单方法是什么? Node .js

java - 最新的 Base 64 和 url 编码库

javascript - 基本的javascript语法问题

javascript - Userscript - 有没有办法将 jquery 代码注入(inject)到 angularjs dom 中?

javascript - MySQL 中的日期格式用于通过 AngularJS 日期过滤器进行过滤

HTML:如何使用 AngularJs 填充第一行为父行且后续行为子行的行