搜尋

首頁  >  問答  >  主體

javascript - Symbol.species方法應該是什麼時候觸發?

在看MDN的描述時,遇到了疑惑。 MDN對這個方法是這麼描述的

你可能想要在擴充數組類別 MyArray 上傳回 Array 物件。例如,當使用例如 map() 這樣的方法傳回預設的建構函式時,你希望這些方法能夠傳回父級的 Array 對象,以取代 MyArray 物件。

 // demo    
    class MyArray extends Array {
        static get [Symbol.species]() {
            return Array;       // 1
        }
    }
    var a = new MyArray(1, 2, 3);  // 2
    var mapped = a.map(x => x * x);  // 3

    console.log(mapped instanceof MyArray); // false
    console.log(mapped instanceof Array);    // true

依照我的理解,這個方法會在建立物件時觸發,得到的物件應該也是Array類型的實例。當調試發現程式碼執行到2時,並沒有跳到1處執行,而在執行3處的map方法時繼續執行到了1處。此時 a instanceof MyArray === true, a instanceof Array === true。 3處執行完了之後會得到程式碼中的輸出結果。
到底這個方法會在何時觸發?為什麼a instanceof MyArray === true 但是 mapped instanceof MyArray === false?

漂亮男人漂亮男人2808 天前533

全部回覆(1)我來回復

  • ringa_lee

    ringa_lee2017-05-19 10:19:53

    你可以看阮老師的說明 http://es6.ruanyifeng.com/#do...內建的Symbol值

    回覆
    0
  • 取消回覆