0
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 应用程序中使用一些非常优雅的代码。

4

2 回答 2

3

The only trouble you'll likely have will be if you (incorrectly) try to use for-in to iterate the Array. As long as you use a for statement or one of the Array iterator methods to constrain the enumeration to numeric indices, there shouldn't be any trouble.

The Array will continue to behave like a typical Array.

于 2013-09-01T15:48:24.040 回答
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 中,因为它将可用于所有已创建并将被创建的数组实例。

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

于 2013-09-01T16:25:20.613 回答