gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:23:25 25 4
gpt4 key购买 nike

我一直在阅读一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com