Javascript 将函数附加到数组

Javascript 将函数附加到数组,javascript,arrays,Javascript,Arrays,这似乎在Chrome中非常有效 是否有任何理由不使用此语法/“功能”?另外,我是否可以指望素数可以像普通数组一样工作(例如,当将其传递给需要数组的函数时) 这就是我希望使用它的原因: 假设我的程序中有一个peopleList。应用程序中的所有功能都会像阵列一样使用它。然后,突然,我向服务器发送了一个帖子。然后我希望数组直接查询服务器,并更新自身。这将允许在我的angular.js应用程序中使用一些非常优雅的代码。您可能遇到的唯一问题是,如果您(错误地)尝试使用for in来迭代数组。只要使用f

这似乎在Chrome中非常有效

是否有任何理由不使用此语法/“功能”?另外,我是否可以指望
素数
可以像普通数组一样工作(例如,当将其传递给需要数组的函数时)


这就是我希望使用它的原因:


假设我的程序中有一个
peopleList
。应用程序中的所有功能都会像阵列一样使用它。然后,突然,我向服务器发送了一个帖子。然后我希望数组直接查询服务器,并更新自身。这将允许在我的angular.js应用程序中使用一些非常优雅的代码。

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


该数组将继续像典型的数组一样运行。

您可能遇到的唯一问题是(错误地)尝试在中使用
for来迭代该数组。只要使用
for
语句或数组迭代器方法之一将枚举约束为数值索引,就不会有任何问题


数组将继续像典型的数组一样工作。

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

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

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

primes.sync()

primes // => [23, 3, 5, 7]
这样,所有数组实例,包括那些在添加函数之前已初始化的实例,都将能够立即自动使用该函数

Array.prototype.sync = function(){this[0]=23;};
但是,只向Array.prototype添加那些有用/有意义/可重用的函数,因为它将可用于所有已创建和将要创建的阵列实例


如果您的函数只被少数实例使用。您最好像上面那样将它们添加到每个实例中。

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

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

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

primes.sync()

primes // => [23, 3, 5, 7]
这样,所有数组实例,包括那些在添加函数之前已初始化的实例,都将能够立即自动使用该函数

Array.prototype.sync = function(){this[0]=23;};
但是,只向Array.prototype添加那些有用/有意义/可重用的函数,因为它将可用于所有已创建和将要创建的阵列实例


如果您的函数只被少数实例使用。您最好像上面那样将它们添加到每个实例。

无论如何,对于数组迭代,应该避免for in循环。返回的密钥顺序没有保证。我总是使用
.forEach
.map
-这是一种功能性的方法<因为我使用了
sugar.js
(顺便说一句,这是一个很棒的库)
中的code>对我来说已经很危险了@kornfridge:那么你应该安全了。而且,由于您无论如何都要扩展本机对象(通过sugar.js),因此您可以将方法添加到
Array.prototype
,这样您就不需要为每个实例手动执行该操作。无论如何,在数组迭代中应该避免for in循环。返回的密钥顺序没有保证。我总是使用
.forEach
.map
-这是一种功能性的方法<因为我使用了
sugar.js
(顺便说一句,这是一个很棒的库)中的code>对我来说已经很危险了@kornfridge:那么你应该安全了。而且,由于您正在扩展本机对象(通过sugar.js),因此可以将您的方法添加到
Array.prototype
,这样就不需要为每个实例手动执行。