[英]create an ES6 class with Array like behaviour
我正在嘗試創建一個行為有點像數組的類。 我想擁有兩件事:
[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
繼承的大多數方法,因為我需要這些方法來執行除內置行為以外的其他操作。
有沒有辦法實現我的要求? 如果是這樣,什么是最好的方法呢?
原來,您可以將屬性存儲在類似整數的字符串鍵下,例如foo['0'] = 'bar'
並使用整數訪問它們,例如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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.