前端技巧-JS元编程ES6 symbol公开符号
元編程就是指以操作目標(biāo)為程序本身的行為特性的編程,而在ES6中增加了類型symbol,除了自定義的符號(hào)之外,還預(yù)定義了其他的一些內(nèi)置符號(hào),可以被稱為內(nèi)置符號(hào)。下面就來(lái)給大家介紹一下這些內(nèi)置符號(hào)。
1、Symbol.iterator
這個(gè)符號(hào)表示任意對(duì)象上的一個(gè)專門的屬性,語(yǔ)言機(jī)制會(huì)自動(dòng)的在這個(gè)屬性上尋找一個(gè)方法,這個(gè)方法會(huì)構(gòu)造一個(gè)迭代器來(lái)消耗這個(gè)對(duì)象的值。… 展開(kāi)和 for…of 循環(huán)會(huì)自動(dòng)使用它。
我們也可以通過(guò)自定義 Symbol.iterator 屬性為任意對(duì)象值定義自己的迭代器邏輯,它將覆蓋默認(rèn)的迭代器。我們相當(dāng)于是定義了一種元編程的行為,提供給JavaScript其他部分(也就是運(yùn)算符和循環(huán)結(jié)構(gòu))在處理定義的對(duì)象時(shí)使用。
2、Symbol.toStringTag 與 Symbol.hasInstance
在日常邏輯中經(jīng)常出現(xiàn)的一個(gè)場(chǎng)景,判斷一個(gè)值是什么類型,通常使用的是 toString() 和 instanceof 。
現(xiàn)在 ES6 中,可以定義這些操作的行為特性了。
通過(guò)以上案例我們可以看出:
toStringTag 符號(hào)指定了在 [object XXXX] 字符串化時(shí)使用的字符串值。
hasInstance 符號(hào)是在構(gòu)造器函數(shù)上的一個(gè)方法,接受實(shí)例對(duì)象值,通過(guò)返回 true 或者 false 來(lái)顯示這個(gè)值是否可以被認(rèn)為是一個(gè)實(shí)例。
在 Function.prototype 上 hasInstance 默認(rèn)的 writable 是 false,不可寫入。可以通過(guò) Object.defineProperty() 來(lái)繞開(kāi)它。
3、Symbol.species
這個(gè)符號(hào)控制要生成新的實(shí)例時(shí),類的內(nèi)置方法使用哪一個(gè)構(gòu)造器。 內(nèi)置原生構(gòu)造器 Symbol.species 的默認(rèn)行為是 return this 。 如果要定義生成新的實(shí)例的方法,使用new this.constructorSymbol.species ,然后繼承的類就可以根據(jù)它來(lái)控制由哪個(gè)構(gòu)造器來(lái)產(chǎn)生這些實(shí)例。
4、Symbol.toPrimitive
在ES6之前,對(duì)象為了某個(gè)操作(例如相加 + 或比較 == )必須強(qiáng)制轉(zhuǎn)換為原生類型時(shí),是無(wú)法控制該行為的 ,現(xiàn)在可以通過(guò)Symbol.toPrimitive這個(gè)符號(hào)來(lái)控制這個(gè)行為。
Symbol.toPrimitive 方法根據(jù)調(diào)用 ToPrimitive 的運(yùn)算期望的類型,會(huì)提供一個(gè)類型(type) 指定 “string”、“number” 或 “default”。
以上就是es6 symbol的介紹了,希望能幫到大家。
本文來(lái)自千鋒教育,轉(zhuǎn)載請(qǐng)注明出處。
總結(jié)
以上是生活随笔為你收集整理的前端技巧-JS元编程ES6 symbol公开符号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JavaScript中短时间高频次触发事
- 下一篇: Java教程之JDBC中的常用接口和类