簡體   English   中英

創建具有類似Array行為的ES6類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM