自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何用知名Symbol黑掉JavaScript(5種方法)

開發(fā) 前端
從循環(huán)到分割再到搜索,知名符號讓我們可以重新定義我們的核心功能,使它們以獨(dú)特和令人愉快的方式運(yùn)行,推動(dòng)了JavaScript可能性的邊界。

他們稱之為知名符號 — 盡管大多數(shù)開發(fā)者從未使用過它們,甚至從未聽說過它們。

這是一個(gè)非??岬墓δ?,你可以用它來實(shí)現(xiàn)這樣的魔法:

你將看到我們?nèi)绾问褂弥?Symbol 構(gòu)建這些類來實(shí)現(xiàn)這一點(diǎn)。

它們?nèi)际顷P(guān)于完全定制內(nèi)置操作(如for..of)的正常行為。這就像C++和C#中的運(yùn)算符重載。

它們也都是Symbol類的靜態(tài)方法。

1. Symbol.hasInstance

首先我們有Symbol.hasInstance:用于輕松改變instanceof運(yùn)算符的行為。

通常,instanceof用于檢查一個(gè)變量是否是某個(gè)類的實(shí)例。

就像它應(yīng)該的那樣;相當(dāng)標(biāo)準(zhǔn)的東西。

但是使用Symbol.hasInstance,我們可以完全改變instanceof的工作方式:

現(xiàn)在就instanceof而言,一個(gè)Person不再是Person了。

如果我們不想完全覆蓋它,而是以一種直觀的方式擴(kuò)展它呢?

我們不能在 Symbol 內(nèi)部使用instanceof,因?yàn)槟菚?huì)很快導(dǎo)致無限遞歸:

class Person {
  static [Symbol.hasInstance](instance) {
    return instance instanceof Person; // 無限遞歸!
  }
}

相反,我們將對象的特殊constructor屬性與我們自己的進(jìn)行比較:

如果你剛剛聽說.constructor,這應(yīng)該解釋一切:

2. Symbol.iterator

我們的下一個(gè)黑客技巧是Symbol.iterator,用于完全改變循環(huán)如何以及是否在對象上工作。

還記得這個(gè)嗎:

我們通過Symbol.iterator實(shí)現(xiàn)了這一點(diǎn):

我們再次看到生成器出現(xiàn)。

每當(dāng)我們使用for..of時(shí)。

這在幕后發(fā)生:

因此,通過Symbol.iterator,我們完全改變了for..of對任何List對象的操作:

3. Symbol.toPrimitive

使用Symbol.toPrimitive,我們可以快速從這個(gè):

變成這個(gè):

我們通過覆蓋Symbol.toPrimitive實(shí)現(xiàn)了這一點(diǎn):

現(xiàn)在我們可以在任何使用字符串進(jìn)行插值和連接的地方使用Person對象:

甚至還有一個(gè)hint參數(shù),可以使對象表現(xiàn)得像number、string或其他東西。

4. Symbol.split

天才的知名 Symbol,用于將你的自定義對象轉(zhuǎn)換為字符串分隔符:

5. Symbol.search

就像Symbol.split一樣,將你的自定義對象轉(zhuǎn)換為復(fù)雜的字符串搜索工具:

最后的思考

從循環(huán)到分割再到搜索,知名符號讓我們可以重新定義我們的核心功能,使它們以獨(dú)特和令人愉快的方式運(yùn)行,推動(dòng)了JavaScript可能性的邊界。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2018-05-23 12:24:03

2010-01-18 10:01:56

2017-10-20 09:04:54

數(shù)據(jù)中心方法綠化

2013-01-07 10:44:00

JavaScriptjQueryJS

2020-05-28 13:33:30

React Hook前端開發(fā)

2018-11-01 10:10:35

網(wǎng)絡(luò)安全網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)威脅

2020-09-01 09:56:26

云端云計(jì)算云服務(wù)

2022-09-02 14:29:01

JavaScrip數(shù)組屬性

2017-02-16 13:33:54

2015-04-27 13:54:10

2015-05-11 10:16:20

2015-04-16 10:43:03

2019-08-22 07:24:25

2012-03-27 10:08:08

JavaScript

2021-02-25 10:46:21

云計(jì)算云服務(wù)器云安全

2021-09-18 23:15:31

微信功能檢測

2010-12-01 09:04:59

PHP開發(fā)

2020-06-09 11:16:42

云計(jì)算云平臺工具

2010-01-27 09:53:37

2017-11-22 14:45:59

物聯(lián)網(wǎng)數(shù)據(jù)數(shù)據(jù)分析
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號