我需要一种“圆形阵列”。我有一切工作,但对于单个实例。我不知道如何让它“实例化”。我的意思是我希望它以下列方式工作:
var arr = ['a', 'b', 'c', 'd']; // it's kind of pseudo-code
arr.getNext(); // gives a
arr.getNext(); // gives b
arr.getNext(); // gives c
arr.getNext(); // gives d
arr.getNext(); // gives a
arr.getNext(); // gives b
// and so on
我知道我可以在里面创建带有数组的对象并迭代它,但我很确定我可以用另一种方式做到这一点。
问题是我需要该对象的几个实例。如果它只是我能做的一个实例:
var arr = ['a', 'b', 'c', 'd'];
arr.getNext = function() {
// ... I got this stuff working
}
如何允许创建此类自定义数组的多个实例?
答案 0 :(得分:4)
即使您可以使用Object.defineProperty
扩展Array.prototype
(以创建不可枚举的属性),替代解决方案也可能会很有趣,具体取决于您的实际需求。
您可以定义一个在数组上返回迭代器的函数:
function iter(arr) {
var index = -1;
return {
next: function() {
index = (index + 1) % arr.length;
return arr[index];
}
};
}
用法:
var it = iter(arr);
it.next();
答案 1 :(得分:1)
您可以扩展prototype
,以便能够在Array
的所有实例中使用它:
Array.prototype.getNext = function(){
var next = this.shift();
this.push(next);
return next;
};
请注意,这会修改数组。
答案 2 :(得分:0)
您可以将getNext方法添加到Array原型中,如下所示:
Array.prototype.getNext = function ()
{
....
}
然后,您可以在您创建的任何阵列上调用此方法。