我需要一种“圆形阵列”。除了单个实例,我一切正常。我不知道如何让它“实例化”。我的意思是我希望它按以下方式工作:
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
}
如何允许创建此类自定义数组的多个实例?
最佳答案
即使您可以使用 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();
关于javascript - 在 Javascript 中如何制作具有可实例化的自定义行为的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17468309/