圖解JavaScript對(duì)象屬性四個(gè)特性

圖解JavaScript對(duì)象屬性四個(gè)特性

我在上圖中簡(jiǎn)單模擬了一處疑似重污染工廠的用水與排污系統(tǒng)模型,通過(guò)類比可視化幫助我理解JavaScript對(duì)象屬性的4個(gè)特性:

索取,代表工廠從大自然中索取潔凈水源,水表記錄了流過(guò)水流傳感器的用水量。

寫臟,代表工廠使用過(guò)的污水排入自然環(huán)境中,類似臟數(shù)據(jù)。

水表,只要水表正在運(yùn)行中,相關(guān)部門就能了解該工廠的用水情況。

總控,斷電后水表和排污開關(guān)皆停止運(yùn)行。

排污控制,其開關(guān)與否直接影響寫臟能否進(jìn)行。

回到JavaScript中,假設(shè)有對(duì)象factories,表示全部重污染工廠的集合:

varfactories = {}

一家名為sb-1的污染工廠進(jìn)入相關(guān)部門監(jiān)控范圍,于是在factories中加入新屬性:

Object.defineProperty(factories,'sb-1', {writable:true,enumerable:true,configurable:true})

writable:true在JavaScript中表示可寫性,圖中表示sb-1工廠的排污開關(guān)是打開狀態(tài);

enumerable:true在JavaScript中表示可枚舉性,圖中表示sb-1工廠的水表正常運(yùn)行中,等著相關(guān)部門來(lái)查水表;

configurable:true在JavaScript中表示可配置性,圖中表示sb-1工廠的總控臺(tái)是通電運(yùn)行狀態(tài)。

除了上面作為例子的1號(hào)污染工廠sb-1,還有2號(hào)、3號(hào)、4號(hào)等等都在相關(guān)部門監(jiān)管范圍內(nèi)。相關(guān)部門開始查水表,只需遍歷factories,如果檢測(cè)到屬性值為"污水"觸發(fā)警報(bào):

for(letfactoryinfactories){console.log(`即將查工廠“${factory}`”的水表)// 即將查工廠“sb-1”的水表check(factories[factory])// 嘟嘟嘟!污水!限期整改!}

查水表的前提條件是:工廠的水表必須是正在運(yùn)行中。

sb-1工廠向環(huán)境中排放未過(guò)濾污水,為了繞過(guò)審查,將工廠水表關(guān)掉了:

Object.defineProperty(factories,'sb-1', {value:"污水"enumerable:false,})

這樣一來(lái),相關(guān)部門再次遍歷factories中的所有工廠,不在審查工廠sb-1,廠長(zhǎng)得意地笑了,小聰明也。

相關(guān)部門也不是吃素的,立即采取措施,審查組到污染工廠將排污閥門關(guān)閉,整改1個(gè)月:

Object.defineProperty(factories,'sb-1', {writable:false})

這下,sb-1工廠一個(gè)月不能再寫臟了,廠長(zhǎng)有小聰明吖,偷偷把排污閥門又打開了:

Object.defineProperty(factories,'sb-1', {writable:true})

這一次相關(guān)部門被惹怒,沒(méi)手軟,果斷出手整治,污染工廠直接歇菜:

Object.defineProperty(factories,'sb-1', {enumerable:false,writable:false,configurable:false})

水表關(guān)閉;排污閥門關(guān)閉。總控臺(tái)一旦被斷電,重污染工廠關(guān)門大吉。

相關(guān)部門要批量關(guān)閉多個(gè)污染工廠,會(huì)這樣做:

Object.defineProperties(factories, {'sb-1':{configurable: flase},'sb-2':{configurable: flase},'sb-3':{configurable: flase}})

另外,getter和setter也屬于屬性特性,它們是函數(shù):

Object.defineProperty(factories,'sb-1', {get:function(){return'污水'},set:function(){},writable:false,configurable:false})

如果工廠將getter函數(shù)的算法設(shè)計(jì)為:

當(dāng)水源被檢測(cè)時(shí)返回(排出)"凈水",當(dāng)未被檢測(cè)時(shí)返回(排出)"污水",emmmm???

檢測(cè)對(duì)象屬性特性可以使用Object.getOwnPropertyDescriptor(),第一個(gè)參數(shù)傳入對(duì)象,第二個(gè)參數(shù)傳入要查詢的屬性名:

Object.getOwnPropertyDescriptor(factories,"sb-1")

現(xiàn)實(shí)世界里,工廠正將污水肆無(wú)忌憚地排入河里;

虛擬世界里,噴子和鍵盤俠們正在網(wǎng)絡(luò)里捍衛(wèi)“正義”。


原創(chuàng)作者:帥華君

原文鏈接:http://www.shuaihuajun.com/article/javascript-object-property-attribute/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 JavaScript提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述一個(gè)對(duì)象的屬性的行為,控制它的行為。這被稱為“屬性描述對(duì)...
    zjh111閱讀 785評(píng)論 0 0
  • 概述 JavaScript提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述一個(gè)對(duì)象的屬性的行為,控制它的行為。這被稱為“屬性描述對(duì)...
    許先生__閱讀 563評(píng)論 0 1
  • 一、什么是屬性描述符? MDN: 對(duì)象里目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符和存取描述符。 數(shù)據(jù)描述符是...
    強(qiáng)哥科技興閱讀 441評(píng)論 0 0
  • 一、什么是屬性描述符? MDN: 對(duì)象里目前存在的屬性描述符有兩種主要形式:數(shù)據(jù)描述符和存取描述符。 數(shù)據(jù)描述符是...
    強(qiáng)哥科技興閱讀 946評(píng)論 0 0
  • 參考文章:屬性描述對(duì)象 概述 JavaScript 提供了一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu),用來(lái)描述對(duì)象的屬性,控制它的行為,比如...
    chrisghb閱讀 303評(píng)論 0 0

友情鏈接更多精彩內(nèi)容