亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

解讀 webconponents.js 中對(duì) ES6 WeakMap 的 shim (一)

Imfan / 982人閱讀

摘要:中對(duì)的要求主要是對(duì)非對(duì)象僅保留弱引用,且取值是復(fù)雜度,這導(dǎo)致了它的兩個(gè)特性不能求大小,更不能枚舉。按說(shuō)這種關(guān)乎內(nèi)存管理的對(duì)象是沒(méi)法的。但是對(duì)有一個(gè)很奇妙的。在中的每一個(gè)中設(shè)置一個(gè)屬性屬性名是的唯一。值為該在中對(duì)應(yīng)的。同時(shí)取值也是復(fù)雜度的。

ES6 中對(duì) WeakMap 的要求主要是對(duì) key(非 null 對(duì)象) 僅保留弱引用,且取值是 O(1) 復(fù)雜度,這導(dǎo)致了它的兩個(gè)特性:

不能求大小,更不能枚舉。

當(dāng) key 對(duì)象不被其他變量引用時(shí),會(huì)被垃圾回收系統(tǒng)回收。

按說(shuō)這種關(guān)乎內(nèi)存管理的對(duì)象是沒(méi)法 shim 的。但是webcomponents.js 對(duì) WeakMap 有一個(gè)很奇妙的 shim。經(jīng)過(guò)閱讀后整理原理如圖:

解說(shuō):

WeakMap 內(nèi)不提供存儲(chǔ) key 和 value 的區(qū)域,避免產(chǎn)生本對(duì)象對(duì) key 的強(qiáng)引用。

每個(gè) WeakMap 中只存儲(chǔ)一個(gè)隨機(jī)、唯一生成的 name 字符串。

在 WeakMap 中的每一個(gè) key 中設(shè)置一個(gè)屬性:

屬性名是 WeakMap 的唯一 name。

值為該 key 在 WeakMap 中對(duì)應(yīng)的 value。

此時(shí),獲取 WeakMap 中指定 key 對(duì)應(yīng)的 value,就等價(jià)于獲取 key 中的 WeakMap::name 屬性的值。

為了防止由于原型繼承導(dǎo)致 WeakMap::name 屬性不是本對(duì)象自有的屬性,采用了一個(gè)技巧來(lái)保證獲取 WeakMap::name 屬性的值不是從原型繼承來(lái)的,這個(gè)技巧作為另一個(gè)文章再談。

雖然使用 Object::hasOwnProperty 也可以達(dá)到相同的效果,但是從庫(kù)的級(jí)別考慮,該屬性可能被第三方代碼污染,所以采用了更極端的方式來(lái)驗(yàn)證。

通過(guò)這種引用方式,達(dá)成了 WeakMap 對(duì)象事實(shí)上沒(méi)有引用到 key 對(duì)象的效果,那么當(dāng) key 對(duì)象不被別的變量引用時(shí),就會(huì)被垃圾回收系統(tǒng)自動(dòng)回收。同時(shí)取值也是 O(1) 復(fù)雜度的。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85523.html

相關(guān)文章

  • es 知識(shí)點(diǎn)解讀

    摘要:返回的遍歷器對(duì)象,可以依次遍歷函數(shù)內(nèi)部的每一個(gè)狀態(tài)。以后,每次調(diào)用遍歷器對(duì)象的方法,就會(huì)返回一個(gè)有著和兩個(gè)屬性的對(duì)象。由于函數(shù)就是遍歷器生成函數(shù),因此可以把賦值給對(duì)象的屬性,從而使得該對(duì)象具有接口。 let 和 const 作用域的概念 全局作用域 函數(shù)作用域 塊作用域如何使用let和const 使用let 1、形成塊級(jí)作用域2、es6下強(qiáng)制開啟嚴(yán)格模式,而在es5下,需要use ...

    LoftySoul 評(píng)論0 收藏0
  • ES6特性概述 - ES6 - ECMAScript特性 - Javascript核心

    摘要:特性概述比較新特性更多。之后后分篇描述目前已經(jīng)比較成熟的語(yǔ)法特性例如和。同上,但返回該元素的索引號(hào)。和對(duì)象的屬性行為一致。不將參數(shù)強(qiáng)制轉(zhuǎn)行為。判斷是否為在范圍內(nèi)的正整數(shù)。不少層面的特性可以通過(guò)進(jìn)行兼容性支持。 原文: http://pij.robinqu.me/JavaScript_Core/ECMAScript/es6/es6_api_extension.html 源...

    Ali_ 評(píng)論0 收藏0
  • ES6 - WeakMap

    Set有對(duì)應(yīng)的WeakSet, Map也有WeakMap。這一篇,我們就來(lái)學(xué)習(xí)一下WeakMap有寫什么特性。先來(lái)看一下WeakMap的基本特性: 1: WeakMap是一種存儲(chǔ)多個(gè)鍵值對(duì)的無(wú)序列表 2: WeakMap的鍵必須是非null的對(duì)象類型 3: WeakMap的鍵對(duì)應(yīng)的值,可以是任意類型 接下來(lái)看一下WeakMap的接口方法:一:WeakMap的新建與初始化與Map相同的,WeakM...

    Youngdze 評(píng)論0 收藏0
  • ES6 系列之 WeakMap

    摘要:一個(gè)對(duì)象若只被弱引用所引用,則被認(rèn)為是不可訪問(wèn)或弱可訪問(wèn)的,并因此可能在任何時(shí)刻被回收。也就是說(shuō),一旦不再需要,里面的鍵名對(duì)象和所對(duì)應(yīng)的鍵值對(duì)會(huì)自動(dòng)消失,不用手動(dòng)刪除引用。如果有錯(cuò)誤或者不嚴(yán)謹(jǐn)?shù)牡胤剑?qǐng)務(wù)必給予指正,十分感謝。 前言 我們先從 WeakMap 的特性說(shuō)起,然后聊聊 WeakMap 的一些應(yīng)用場(chǎng)景。 特性 1. WeakMap 只接受對(duì)象作為鍵名 const map = ...

    CollinPeng 評(píng)論0 收藏0
  • 面試題里那些各種手寫

    摘要:最近準(zhǔn)備初級(jí)前端面試,發(fā)現(xiàn)有很多手寫實(shí)現(xiàn)什么的,例如什么手寫實(shí)現(xiàn),。后面以這道題為引線面試官可能會(huì)追問(wèn)什么是執(zhí)行上下文的判斷,的區(qū)別手寫一個(gè)函數(shù)實(shí)現(xiàn)斐波那契數(shù)列首先拷一個(gè)阮神在他教程里的一個(gè)寫法。 最近準(zhǔn)備初級(jí)前端面試,發(fā)現(xiàn)有很多手寫實(shí)現(xiàn)什么的,例如什么手寫實(shí)現(xiàn)bind,promise。手寫ajax,手寫一些算法。翻閱了很多書籍和博客。 這里做一個(gè)總結(jié)改進(jìn),算是對(duì)我后面大概為期一個(gè)月找...

    wh469012917 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<