将函数附加到数组

时间:2013-09-01 15:45:20

标签: javascript arrays

var primes=[2,3,5,7]
primes.sync = function(){this[0]=23;}

primes // => [2, 3, 5, 7]

primes.sync()

primes // => [23, 3, 5, 7]

这似乎在Chrome中完美运行。

有没有理由不使用这种语法/“功能”?另外,我可以指望primes表现为正常数组(例如,将其传递给需要数组的函数时)吗?


这就是我想要使用它的原因:

说我的程序中有peopleList。整个应用程序的功能将像数组一样使用它。然后,突然,我对服务器进行了POST。然后我希望数组直接查询服务器,并自行更新。这将允许我的angular.js应用程序中的一些非常优雅的代码。

2 个答案:

答案 0 :(得分:3)

如果您(错误地)尝试使用for-in来迭代数组,那么您可能遇到的唯一麻烦就是。只要您使用for语句或其中一个Array迭代器方法将枚举约束为数字索引,就不会有任何问题。

Array将继续像典型的Array一样运行。

答案 1 :(得分:0)

您要做的是向Array.prototype添加一个函数,而不是将其添加到数组实例中。见下文。

Array.prototype.sync = function(){this[0]=23;};

这样,所有数组实例,包括那些在添加函数之前已经初始化的实例,都会自动同时使用该函数。

var a = [];

a.sync(); // TypeError: Object [object Array] has no method 'sync'

Array.prototype.sync = function(){this[0]=23;};

a.sync();
a // [23]

var b = [1,2,3];
b.sync();

b // [23, 2, 3]

但是,只添加那些对Array.prototype有用/有意义/可重用的函数,因为它将可用于所有已创建并将被创建的数组实例。

如果您的功能仅由少数实例使用。你最好像上面那样将它们添加到每个实例中。