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应用程序中的一些非常优雅的代码。
答案 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有用/有意义/可重用的函数,因为它将可用于所有已创建并将被创建的数组实例。
如果您的功能仅由少数实例使用。你最好像上面那样将它们添加到每个实例中。