前端技巧-JS超程式設計ES6 symbol公開符號

千鋒武漢發表於2021-06-30

      超程式設計就是指以操作目標為程式本身的行為特性的程式設計,而在ES6中增加了型別symbol,除了自定義的符號之外,還預定義了其他的一些內建符號,可以被稱為內建符號。下面就來給大家介紹一下這些內建符號。

      1. Symbol.iterator

      這個符號表示任意物件上的一個專門的屬性,語言機制會自動的在這個屬性上尋找一個方法,這個方法會構造一個迭代器來消耗這個物件的值。… 展開和 for…of 迴圈會自動使用它。

      我們也可以透過自定義 Symbol.iterator 屬性為任意物件值定義自己的迭代器邏輯,它將覆蓋預設的迭代器。我們相當於是定義了一種超程式設計的行為,提供給JavaScript其他部分(也就是運算子和迴圈結構)在處理定義的物件時使用。

web前端培訓1

      2. Symbol.toStringTag 與 Symbol.hasInstance

      在日常邏輯中經常出現的一個場景,判斷一個值是什麼型別,通常使用的是 toString() 和 instanceof 。

web前端培訓2

      現在 ES6 中,可以定義這些操作的行為特性了。

web前端培訓3

      透過以上案例我們可以看出:

      toStringTag 符號指定了在 [object XXXX] 字串化時使用的字串值。

      hasInstance 符號是在構造器函式上的一個方法,接受例項物件值,透過返回 true 或者 false 來顯示這個值是否可以被認為是一個例項。

      在 Function.prototype 上 hasInstance 預設的 writable 是 false,不可寫入。可以透過 Object.defineProperty() 來繞開它。

      3. Symbol.species

      這個符號控制要生成新的例項時,類的內建方法使用哪一個構造器。 內建原生構造器 Symbol.species 的預設行為是 return this 。 如果要定義生成新的例項的方法,使用new this.constructorSymbol.species ,然後繼承的類就可以根據它來控制由哪個構造器來產生這些例項。

web前端培訓4

      4. Symbol.toPrimitive

      在ES6之前,物件為了某個操作(例如相加 + 或比較 == )必須強制轉換為原生型別時,是無法控制該行為的 ,現在可以透過Symbol.toPrimitive這個符號來控制這個行為。

web前端培訓5

      Symbol.toPrimitive 方法根據呼叫 ToPrimitive 的運算期望的型別,會提供一個型別(type) 指定 "string"、"number" 或 "default"。

       以上就是es6 symbol的介紹了,希望能幫到大家。

      本文來自千鋒教育,轉載請註明出處。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2779009/,如需轉載,請註明出處,否則將追究法律責任。

相關文章