javascript - 在 Javascript 中如何制作具有可实例化的自定义行为的数组?

标签 javascript prototype prototypal-inheritance

我需要一种“圆形阵列”。除了单个实例,我一切正常。我不知道如何让它“实例化”。我的意思是我希望它按以下方式工作:

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/

相关文章:

javascript - 为什么在计算scrollPercent时需要从windowHeight减少clientHeight?

javascript - 如何在 AngularJS 的 ng-init 中使用三元?

javascript - 具有向下钻取功能的 Highcharts-ng

javascript - javascript 类定义与对象的性能

javascript - 如何在 jQuery/JavaScript 中扩展返回的对象

javascript - 避免在 JavaScript 类型函数中使用 self=this

JavaScript Onclick 电话/电子邮件验证功能不起作用

javascript - 模拟 'class' 时,为什么要在 .prototype 属性中而不是在构造函数本身中设置方法?

javascript - 如何在 JavaScript 中使用链而不应用反模式?

javascript - 从构造函数中将方法附加到原型(prototype)