我正在尝试创建一个行为有点像数组的类。我希望有两件事:
[index]
访问index
是一个整数使类可迭代非常简单:
class MyList {
constructor() {
this._list = [1, 2, 3];
}
[Symbol.iterator]() {
return this._list.values();
}
}
以上允许迭代类的实例:
let myList = new MyList();
for (let item of myList) {
console.log(item); // prints out 1, 2, 3
}
弄清楚如何实现第二个要求并不容易,我发现的唯一想法就是扩展Array
。但这意味着我必须覆盖从Array
继承的大多数方法,因为我需要这些方法来做除内置行为之外的其他方法。
有没有办法实现我的要求?如果是这样,最好的办法是什么?
答案 0 :(得分:4)
事实证明,您可以在类似整数的字符串键下存储属性,例如: G。 foo['0'] = 'bar'
并使用整数访问它们,例如: G。 foo[0] // => bar
。使用整数分配也有效。感谢@JMM指出这些东西。
因此,解决方案就像:
class Foo {
constructor (...args) {
for (let i = 0; i < args.length; i++) {
this[i] = args[i];
}
}
[Symbol.iterator]() {
return Object
.keys(this)
.map(key => this[key])
.values();
}
}
const foo = new Foo('a', 'b', 'c');
for (let item of foo) {
console.log(item); // prints out a, b, c
}
console.log(foo[1]); // prints out b